네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'web/Spring'에 해당되는 글 67건


반응형

JSP에서 숫자나 날짜를 정해진 포맷으로 출력할 때, formatNumber, formatDate 확장 태그를 사용한다. 

 

JSTL

이 확장 태그들은 JSTL 라이브러리에 들어있다.

따라서 프로젝트 pom.xml 파일에 JSTL dependency가 들어있어야 한다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

위 확장 태그들을 사용하기 위해 필요한 선언이다. 이 선언이 JSP 파일 선두에 있어야 한다.

 

formatNumber

<fmt:formatNumber value="${ weight }" pattern="#.#" />

weight 값이 소숫점 한자리까지 출력된다. 그 아래 자리는 반올림된다.

 

<fmt:formatNumber value="${ weight * 1000 }" pattern="#,###" />

weight * 1000 식의 값이 출력된다. 3자리마다 콤마(,)가 출력된다 (1,234,567)

formatNumber 확장 태그의 pattern은 Java의 DecimalFormat 클래스의 그것과 같다.

 

formatDate

<fmt:formatDate pattern="yyyy-MM-dd" value="${ birthday }" />

birthday 값을 "yyyy-MM-dd" 형태로 출력한다. birthday 값은 Date 타입이어야 한다. formatDate 확장 태그의 pattern은 Java의 SimpleDateFormat 클래스의 그것과 같다. 

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

1. 컨트롤러 클래스

HomeController.java

import org.springframework.streotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
	
    @RequestMapping("/")
    public String index(Model model) {
    	model.addAttribute("message", "좋은 아침!");
        return "index";
    }
}

컨트롤러 클래스는 웹 브라우저의 URL 요청을 받아서, 웹 서버에서 실행되는 자바 클래스이다. 웹 브라우저가 웹서버에 어떤 URL을 요청을 하면 그 URL에 해당하는 컨트롤러의 메소드가 자동으로 호출되어 실행된다.

 

@Controller 어노테이션

컨트롤러 클래스에 이 어노테이션(Annotation)을 붙여줘야 한다. 

 

액션 메서드

웹 브라우저가 어떤 URL을 웹서버에 요청하면, 그 요청된 URL에 해당하는 컨트롤러의 어떤 메서드가 자동으로 호출된다. 웹 브라우저의 요청에 의해서 자동으로 호출되는 컨트롤러의 메서드를 액션메서드라 한다.

 

@RequestMapping 어노테이션

액션 메서드에 붙은 @RequestMapping("/") 어노테이션의 "/" 부분은 그 액션 메서드를 호출하기 위한 URL이다. 자동으로 호출할 액션 메서드를 찾을 때 컨트롤러 클래스의 이름이나 액션 메서드의 이름은 상관없고 @RequestMapping 어노테이션에 등록되어 있는 URL만 일치하면 된다.

 

컨트롤러 액션 메서드의 리턴값

컨트롤러의 액션 메서드는 문자열을 리턴한다. 컨트롤러의 액션 메서드가 리턴하는 문자열은 View 파일의 이름이다. 컨트롤러의 액션 메서드가 리턴된 후, 뷰 파일이 실행된다. 액션 메서드가 리턴한 이름의 뷰 파일이 실행된다.

 

Model 객체

public String index(Model model)

컨트롤러의 액션 메서드는 Spring Web MVC 엔진에 의해 호출된다. 대부분의 액션 메서드의 파라미터에 Model model 객체가 포함된다. 컨트롤러의 액션 메서드가 뷰 파일에 전달할 데이터를 Model 객체에 넣어 전달한다. 즉, Model 객체는 데이터를 전달하는 객체라고 보면 된다.

 

model의 attribute

model.addAttribute("message", "좋은 아침!");

뷰 파일에 전달할 데이터를 Model 객체에 넣는 코드이다. 전달되는 데이터의 이름은 "message"이고 값은 "좋은 아침!" 문자열이다. 이렇게 모델에 담겨서 뷰에 전달되는 데이터는 model attribute라고 한다. 

뷰에서 model attribute를 출력하는 코드는

${message}

위와 같다. model attribute 이름이 정확히 일치해야 한다.

2. 뷰 (view)

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<!DOCTYPE html> 
<html> 
<head>
<meta charset="utf-8"> 
</head>
<body>
	<h1>안녕하세요</h1> 
	<h3>${ message }</h3> 
</body>
</html>

웹 브라우저의 요청(http request)에 대한 응답(http response)으로, 웹 서버에서 웹 브라우저로 전송되는 것들은 http 태그가 대부분이다. 

 

실행 순서

웹 브라우저에서 웹 서버에 요청(http request)이 전달되면, 요청된 URL과 일치하는 컨트롤러의 액션 메서드가 실행된다. 그리고 액션 메서드의 뒤를 이어서 뷰(view) 파일이 실행된다. 뷰 파일의 실행 결과, 출력된 html 태그들이 웹 브라우저로 전송된다.

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

의존성 주입 애노테이션 - @Autowired @Resource @Inject

의존 객체 자동 주입은 스프링 설정 파일에서 <constructor-arg> 또는 <property> 태그로 의존 객체 대상을 명시하지 않아도 스프링 컨테이너가 자동적으로 의존 대상 객체를 찾아 해당 객체에 필요한 의존성을 주입하는 것을 말한다.

이를 구현하는 방법은 @Autowired, @Resource, @Inject 애노테이션 등을 사용하여 구현한다. 

1. @Autowired

@Autowired는 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입한다.

@Autowired는 필드, 생성자, Setter에 붙일 수 있다.

Type => Qualifier => Name

 

1) @Autowired 필드주입

public class UserService {

    @Autowired
    private UserRepository userRepository;
    
    public UserService() {
    }
}

2) @Autowired 생성자 주입

public class UserService {

    private UserRepository userRepository;
    
    @Autowired
    public UserService (UserRepository userRepository) {
    	this.userRepository = userRepository;
    }
}

3) @Autowired Setter 주입

public class UserService {

    private UserRepository userRepository;
    
    public UserRepository() {
    }
    
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
    	this.userRepository = userRepository;
    }
}

4) @Qualifier 애노테이션

XML 설정 파일

<bean id="userRepository1" class="com.user.repository.UserRepository">
	<qualifier value="userRepository"/>
</bean>
<bean id="userRepository2" class="com.user.repository.UserRepository"/>
<bean id="userRepository3" class="com.user.repository.UserRepository"/>

위와 같이 동일한 타입의 빈 객체가 여러개 정의되어 있을 경우 우선적으로 사용할 빈 객체의 <bean> 태그 하위에 <qualifier> 태그를 설정한다.

 

자바코드

public class UserService {

    @Autowired
    @Qualifier("userRepository")
    private UserRepository userRepository;
    
    public UserService() {}
}

자바 코드에서는 @Autowired와 함께 @Qualifier를 사용해서 @Qualifier에 XML 설정파일에서 설정한 <qualifier> 태그의 value 값을 지정해준다.

이렇게 하면 동일한 타입의 빈이 여러 개일 경우 우선적으로 특정 빈이 주입된다.

 

2. @Resource

@Resource는 주입하려고 하는 객체의 이름(id)이 일치하는 객체를 자동으로 주입한다. 

@Resource는 Java가 제공하는 애노테이션이며 필드, Setter에 붙일 수 있지만 생성자에는 붙일 수 없다.

Name => Type => Qualifier

 

1) 의존성 설정

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

프로젝트에서 사용하기 위해 javax.annotation-api 의존성을 추가한다.

 

2) @Resource 필드 주입

import javax.annotation.Resource;

public class UserService {

    @Resource
    private UserRepository userRepository;
    
    public UserService() {}
}

3) @Resource Setter 주입

import javax.annotation.Resource;

public class UserService {

    private UserRepository userRepository;
    
    public UserService() {}
    
    @Resource
    public setUserRepository(UserRepository userRepository) {
    	this.userRepository = userRepository;
    }
}
728x90

3. @Inject

@Inject는 @Autowired와 유사하게 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입한다. 

Type => Qualifier => Name

 

1) 의존성 설정

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

프로젝트에서 사용하기 위해 javax.inject 의존성을 추가한다.

 

2) @Inject 필드 주입

import javax.inject.Inject;

public class UserService {

    @Inject
    private UserRepository userRepository;
    
    public UserService() {}
}

3) @Inject 생성자 주입

import javax.inject.Inject;

public class UserService {

    private UserRepository userRepository;
    
    @Inject
    public UserService(UserRepository userRepository) {
    	this.userRepository = userRepository;
    }
}

4) @Inject Setter 주입

import javax.inject.Inject;

public class UserService {

    private UserRepository userRepository;
    
    public UserService() {}
    
    @Inject
    public void setUserRepository(UserRepository userRepository) {
    	this.userRepository = userRepository;
    }
}

5) @Named 애노테이션

@Autowired의 @Qualifier과 같이 사용할 수 있는 것이 @Inject에서는 @Named이다.

@Qualifier과 달리 @Named에는 빈 이름(id)를 지정하므로 @Autowired, @Qualifier를 사용할 때에 비해 XML 설정 파일이 다소 짧아진다는 특징이 있다.

 

XML 설정 파일

<bean id="userRepository1" class="com.user.repository.UserRepository">
<bean id="userRepository2" class="com.user.repository.UserRepository">
<bean id="userRepository3" class="com.user.repository.UserRepository">

<qualifier> 태그가 필요한 @Qualifier과 달리 @Named는 XML 설정 파일에 추가적으로 설정할 것이 없다.

 

자바코드

import javax.inject.Inject;
import javax.inject.Named;

public class UserService {

	@Inject
	@Named("userRepository1")
	private UserRepository userRepository;
	
	public UserService() {
		
	}
}

 

참고

https://www.baeldung.com/spring-annotations-resource-inject-autowire

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

발단>

1. Gradle 버전이 4.*에서부터 5.* 최근에는 6.7까지 출시

2. Spring boot 2.3부터 Gradle 버전 6.3 이상을 요구

 

개발환경>

spring boot 2.4

Gradle 6.7.1 

 

인텔리제이에서 프로젝트를 진행하면서 QueryDsl을 이용해서 생성한 Q클래스를 생성하였다.

빌드시 에러가 발생함. 

 

에러 메시지>

package com.querydsl.core.types does not exist

수정 전 build.gradle>

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
    id 'java'
}

group = 'com.jiyoon'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'io.rest-assured:rest-assured:4.3.3'
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
    implementation 'com.querydsl:querydsl-jpa'
    implementation 'com.querydsl:querydsl-apt'
}

test {
    useJUnitPlatform()
}

def querydslSrcDir = "src/main/generated"

querydsl {
    library = "com.querydsl:querydsl-apt"
    jpa = true
    querydslSourcesDir = querydslSrcDir
}

sourceSets {
    main.java.srcDirs = ['src/main/java', querydslSrcDir]
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

Gradle Plugin “com.ewerk.gradle.plugins.querydsl” 로 설정하였다. 해당 프로젝트에서는 빌드 시 에러가 발생

 

수정 후 build.gradle>

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.jiyoon'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

def querydslVersion = '4.3.1'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'io.rest-assured:rest-assured:4.3.3'
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

// Querydsl
    implementation group: 'com.querydsl', name: 'querydsl-jpa', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-core', version: querydslVersion

    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion, classifier: 'jpa'
    annotationProcessor("jakarta.persistence:jakarta.persistence-api")
    annotationProcessor("jakarta.annotation:jakarta.annotation-api")
}

test {
    useJUnitPlatform()
}

clean {
    delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}

참고

Gradle 5.0이상 & IntelliJ 2020.* 사용 시

 

Spring Boot Data Jpa 프로젝트에 Querydsl 적용하기

안녕하세요? 이번 시간에는 Spring Boot Data Jpa 프로젝트에 Querydsl을 적용하는 방법을 소개 드리겠습니다. 모든 코드는 Github에 있습니다. Spring Data Jpa를 써보신 분들은 아시겠지만, 기본으로 제공해

jojoldu.tistory.com

[gradle] 그레이들 Annotation processor 와 Querydsl

 

[gradle] 그레이들 Annotation processor 와 Querydsl - I'm honeymon(JiHeon Kim).

이 글에서 다룰 예정인 ‘Querydsl’과 ‘Annotation processor’ 에 관한 내용도, 스프링 부트를 버전업하는 과정에서 겪게 된다. 사내 개발기기 교체주기가 되어 새로운 맥북을 받고 스프링 부트 버전

honeymon.io

problem-with-generating-querydsl-classes-with-gradle

 

Problem with generating Querydsl classes with Gradle

I want to generate 'Q' classes using querydsl. The problem that I'm facing is described by errors: > Task :compileJava FAILED Attempt to recreate a file for type com.my.dinner.rest.database.ent...

stackoverflow.com

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

목차

1. Spring Boot 프로젝트 생성 및 설정

2. Spring Boot 프로젝트와 RDS MySQL 연동 후 CRUD 메서드 구현

3. Android에서 Retrofit을 사용해서 REST API와 통신

 

참고사항

1. 졸업 프로젝트(임시 프로젝트명 : LIE)을 진행하였을 때 

2. 사용한 소프트웨어는 STS 4.5.1MySQL Workbench, PuTTY 등이있으며, Java 빌드 도구로는 Maven을 사용하고 있습니다. 

3. AWS 이용할 수 있다는 가정하에 진행됩니다. 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/26

4. REST API의 이론 개념은 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/17

5. 간단한 데이터베이스를 만들어 놓은 상태입니다. project 스키마Member 테이블을 생성하였습니다.

CREATE TABLE `Member` (
  `id` varchar(45) NOT NULL,
  `name` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

1. Spring Boot 프로젝트 생성

1) 프로젝트 생성

[File - New - Spring Starter Project]

Type : Maven / Packaging : Jar로 설정하고

Name, Group, Package 명을 입력한다. 

Spring Web/ MySQL Driver/ Spring Data JPA 를 선택하고 [Finish] 버튼 클릭

 

2) application.properties

src/main/resources/application.properties

# API 호출시, SQL 문을 콘솔에 출력한다.
spring.jpa.show-sql=true

# DDL 정의시 데이터베이스의 고유 기능을 사용합니다.
# ex) 테이블 생성, 삭제 등
spring.jpa.generate-ddl=true

# MySQL을 사용한다.
spring.jpa.database=mysql

# MySQL 설정
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
spring.datasource.hikari.username=user1
spring.datasource.hikari.password=test1234

# MySQL 상세 지정
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database=mysql
spring.jpa.show-sql=true

application.properties는 spring Boot 설정 파일이다.

MySQL 설정에서 hikari를 써준 이유는 hikari Connection Pool를 사용하기 위함이다. hikariCP를 사용하지 않을 경우 그냥 spring.datasource.diver-class-name 등으로 작성하면 된다.

 

* spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul

 

1. database-1.(생략).ap-northeast-2.rds.amazonaws.com 대신에 본인 AWS의 엔드 포인트를 입력한다.

2. project 대신에 본인 스키마를 입력한다.

3. useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul 은 MySQL 설정하는 부분이다. utf-8로 인코딩 설정, 서버 타임존을 아시아로 설정하였다.

 

* spring.datasource.hikari.username=user1

* spring.datasource.hikari.password=test123

 

데이터베이스에 연결할 계정을 지정한다. 본인의 데이터베이스를 설정한대로 작성한다.

 

* spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

 

엔터티 클래스의 studentNumber 속성에 자동으로 연결될 데이터베이스 필드 명이

studentNumber 형태이면 이 설정이 필요하다. (camel case)

student_number 형태이면 이 설정이 필요없다. (snake case)

 

3) pom.xml

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
		<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.apache.tomcat.embed</groupId>
		<artifactId>tomcat-embed-jasper</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>com.zaxxer</groupId>
		<artifactId>HikariCP</artifactId>
		<version>3.1.0</version>
	</dependency>
</dependencies>

오류 방지를 위해 모든 라이브러리 의존성을 첨부합니다. 

 

4) 테스트용 컨트롤러

TestController.java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

	@RequestMapping("/")
	public String index() {
		return "Hello!";
	}
}

[프로젝트 마우스 우클릭 - Run As - Spring Boot App]을 클릭해야 실행이 된다.

localhost:8080 에 접근하면 Hello! 텍스트가 보인다.

2. 엔터티 클래스 구현

Member.java

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Member {
	@Id
	private String id;
	private String name;
	private String password;

	public Member() {

	}

	public Member(String id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 

3. 레포지토리 구현

MemberRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import kr.ac.skhu.project.domain.Member;

@Repository
public interface MemberRepository extends JpaRepository<Member, String>
{
	
}

 

4. 컨트롤러 구현

APIController.java

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import Member;
import MemberRepository;

@RequestMapping("/member")
@RestController
public class APIController {

	@Autowired
	private MemberRepository memberRepository;

	@RequestMapping(value = "/select", method = { RequestMethod.GET, RequestMethod.POST })
	public List<Member> selectAll() {
		return memberRepository.findAll();
	}

	@RequestMapping(value = "/insert", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public Member insert(@RequestBody Map<String, String> map) {
		return memberRepository.save(new Member(map.get("id"), map.get("name"), map.get("password")));
	}
}

웹브라우저에서 http://localhost:8080/member/select

URL을 GET 방식으로 요청하자.

서버가 전송하는 JSON 포멧 데이터를 웹브라우저에서 볼 수 있다.

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !