HTTP Request의 Body부분이 Query String 형태일 때 Java 객체로 전달받는 방법
→ @ModelAttribute
애너테이션을 이용해 Java 객체로 변환하여 사용
HTTP Request의 Body부분이 JSON 형태일 때 Java 객체로 전달받는 방법
→ @RequestBody
애너테이션을 이용해 Java 객체로 변환하여 사용
@Controller
대신 @RestController
를 사용해야 한다.주의사항 : 1대1로 매핑을 시켜주는 과정을 거치기 때문에 Setter() 혹은 생성자가 필요
HTTP Body에 들어있는 Query String(ex.?name=Robbie&age=95
) 방식으로 되어있는 String 데이터를 읽고 String 내부에서 자동으로 Java 객체로 만들어주는 애너테이션
@ModelAttribute
애너테이션을 사용하면 Jackson라이브러리
를 사용해 서버가 Java의 객체로 데이터를 받아올 수 있다.Query String 방식의 @RequestParam
의 경우 데이터를 한 두개씩만 있다면 괜찮지만 여러 개의 데이터가 존재한다면 코드가 복잡해지고 유지보수가 어려워진다.
name=Robbie&age=95
형태로 담아서 서버로 전달@ModelAttribute
애너테이션을 사용하여 HTTP Request의 Body 데이터를 Java의 객체(Star star) 형태로 전달 받음[Request sample]
GET http://localhost:8080/hello/request/form/param/model?name=Robbie&age=95
@GetMapping("/form/param/model")
@ResponseBody
public String helloRequestParam(@ModelAttribute Star star) {
return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
}
Spring에서는 @ModelAttribute
, @RequestParam
생략 가능
@RequestParam
로 간주@ModelAttribute
가 생략되어있다 판단.→ 이때 SimpleValueType은 원시타입(int 등), Wraaper타입(Integer 등), Data등의 타입을 의미
HTTP Request의 Body에 JSON 데이터를 담아 서버에 전달할 때, 해당 Body 데이터를 Java의 객체로 전달받는 방법
{"name":"Robbie","age":"95"}
JSON
형태로 데이터가 서버에 전달되었을 때, @RequestBody
애너테이션을 사용해 데이터를 객체 형태로 받을 수 있다.[Request sample]
POST : http://localhost:8080/hello/request/form/json
Header : Content type: application/json
Body : {"name":"Robbie","age":"95"}
@PostMapping("/form/json")
@ResponseBody
public String helloPostRequestJson(@RequestBody Star star) {
return String.format("Hello, @RequestBody.<br> (name = %s, age = %d) ", star.name, star.age);
}
해당 객체의 필드에 데이터를 넣어주기 위해 set or get 메서드 또는 오버로딩된 생성자가 필요
ex. @ModelAttribute
사용하여 데이터를 받아올 때 해당 객체에 set 메서드 혹은 오버로딩된 생성자가 없다면 받아온 데이터를 해당 객체의 필드에 담을 수 없다.
→ 따라서 객체로 데이터를 받아올 때 데이터가 제대로 들어오지 않는다면 우선 해당 객체의 set or get 메서드 또는 오버로딩된 생성자의 유무를 확인해야 한다.
RestController 참고 사이트
RestController 참고 사이트