Spring MVC(@RequestBody, HttpEntity, @ResponseBody, ResponseEntity)
이 내용은 인프런의 스프링 웹 MVC강좌를 참고하여 만들었습니다.
1, @RequestBody
- 요청본문에 있는 형태가 json데이터 등이 있을 때 HttpMessageConverter를 통하여 변환한 객체로 받을 수 있게 해 준다.
- 유효성 검사가 가능하고 BindingResult를 통하여 타입 매칭이 잘 못 되었을 시 처리가 가능하다.
- HttpMessageConverter는 WebMvcConfigurer를 통하여 추가를 하거나 다시 설정이 가능하다.
1) 추가시 : extendMessageConverters를 override
설정시 : configureMessageConverters를 override
2) 기존 컨버터 : WebMvcConfigurationSupport.addDefaultHttpMessageConverters
@Controller
@RequestMapping("/api/events")
public class Eventapi {
@PostMapping
@ResponseBody
public Event createEvent(@RequestBody @Valid Event event, BindingResult bindingResult){
if (bindingResult.hasErrors()){
bindingResult.getAllErrors().forEach(error -> {
System.out.println(error);
});
}
return event;
}
}
2, HttpEntity
-@RequestBody이외에 추가적으로 헤더 정보를 사용 할 수 있다.
@Controller
@RequestMapping("/api/events")
public class Eventapi {
@PostMapping
@ResponseBody
public Event createEvent(HttpEntity<Event> request){
//save event
MediaType contentType = request.getHeaders().getContentType();
System.out.println(contentType);
return request.getBody();
}
}
3, @ResponseBody
- 데이터를 HttpMessageConverter를 사용하여 응답 본문에 메세지로 보냄
- @RestController를 사용하면 추가적으로 붙힐 필요가 없음
4, ResponseEntity
- 응답 헤더와 본문 내용을 설정하여 응답을 처리 할 수 있음
@Controller
@RequestMapping("/api/events")
public class Eventapi {
@PostMapping
public ResponseEntity<Event> createEvent(@RequestBody @Valid Event event, BindingResult bindingResult){
//save event
if (bindingResult.hasErrors()){
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(event);
//이렇게 응답 설정도 가능
//return new ResponseEntity<Event>(event, HttpStatus.CREATED);
}
}
1) ResponseEntity.ok(event); : 200응답을 보냄(본문은 event)
2) ResponseEntity<Event>(event, HttpStatus.CREATED); : 201응답을 보냄(본문은 event)
3) ResponseEntity.badRequest().build(); : 400응답을 보냄