.html
파일을 찾아 반환한다.@GetMapping("/response/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
Java는 JSON 타입을 지원하지 않기 때문에, JSON 형태의 String 타입으로 변환해야 한다.
@GetMapping("/response/json/class")
@ResponseBody
public Star helloClassJson() {
return new Star("Robbie", 95);
}
스프링은 내부적으로 자동으로 자바의 객체를 Json 타입으로 바꾸며
이 때, Key는 필드 이름으로 설정된다.
@RestController를 사용시 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가된다.
JSON 데이터 구조를 처리해주는 라이브러리이다.
Object
를 JSON
타입의 String
으로 변환해 줄 수 있으며, 역으로도 변환이 가능하다.
직접 JSON
데이터 처리시, Jackson 라이브러리의 ObjectMapper
를 사용하면 된다.
@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
Star star = new Star("Robbie", 95);
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
String json = objectMapper.writeValueAsString(star);
System.out.println("json = " + json);
}
objectMapper의 writeValueAsString 메서드를 사용하여 변환 할 수 있다.
파라미터에 JSON
으로 변환시킬 Object의 객체를 주면 된다.
Object를 JSON
타입의 String으로 변환하기 위해서는 해당 Object에 get Method가 필요하다.
@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
}
JSON
타입의 String, 두 번째 파라미터에는 변환할 Object의 class 타입을 넣는다.JSON
타입의 String을 Object로 변환하기 위해서는 해당 Object에 기본 생성자, get or set 메서드가 필요하다.// [Request sample]
// GET http://localhost:8080/hello/request/star/Robbie/age/95
@GetMapping("/star/{name}/age/{age}")
@ResponseBody
public String helloRequestPath(@PathVariable String name, @PathVariable int age)
{
return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
}
서버에 보내려는 데이터를 URL 경로에 추가할 수 있다.
/star/{name}/age/{age}
이처럼 URL 경로에서 데이터를 받고자 하는 위치의 경로에(@PathVariable String name, @PathVariable int age)
그리고 해당 요청 메서드 파라미터에@PathVariable
애너테이션과 함께 {name} 중괄호에 선언한 변수명과 변수 타입을 선언하면 해당 경로의 데이터를 받아온다.// [Request sample]
// GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
?name=Robbie&age=95
에서 key 부분에 선언한 name과 age를 사용하여(@RequestParam String name, @RequestParam int age)
해당 요청 메서드 파라미터에@RequestParam
애너테이션과 함께 key 부분에 선언한 변수명과 변수타입을 선언하면 데이터를 받아올 수 있다.// http://localhost:8080/hello/request/form/param
// HTML
<form method="POST" action="/hello/request/form/model">
<div>
이름: <input name="name" type="text">
</div>
<div>
나이: <input name="age" type="text">
</div>
<button>전송</button>
</form>
// [Request sample]
// POST http://localhost:8080/hello/request/form/param
// Header
// Content type: application/x-www-form-urlencoded
// Body
// name=Robbie&age=95
@PostMapping("/form/param")
@ResponseBody
public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
@RequestParam(required = false)
required 옵션을 false로 설정하면 Client에서 전달받은 값들에서@PathVariable
도 해당 옵션이 존재한다. // [Request sample]
// POST http://localhost:8080/hello/request/form/param
// Header
// Content type: application/x-www-form-urlencoded
// Body
// name=Robbie&age=95
@PostMapping("/form/param")
@ResponseBody
public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
}