[Spring] @ResponseEntity가 뭘까? @ResponseBody와 차이점?
by coco3o반응형
@ResponseBody
@ResponseBody 는 핸들러 메소드에 붙일 수 있는 어노테이션으로 컨트롤러가 데이터를 반환할 때
HttpMessageConverter 를 사용해서 자바 객체를 응답 본문(body) 메시지를 만들어 반환할 수 있게 도와준다.
@ReseController 를 사용하면 자동으로 모든 핸들러 메소드에 @ResponseBody 가 적용된다.
@ResponseEntity
@ResponseEntity는 반환값에 상태 코드와 응답 메시지를 주고 싶을 때 사용한다.
ResponseEntity.ok( ),
ResponseEntity.badRequest( ).build( ), ResponseEntity.created( ) 등을 사용할 수 있다.
HTTP 상태 코드 종류 알아보기
@RestController @RequestMapping("/api/events") public class EventApi { @PostMapping public ReseponseEntity<Event> createEvent(@RequestBody @Valid Event event, BindingResult bindingResult) { //save event to DB if(bindingResult.hasErrors()) { //error 가 있다면 BadRequest를 보낸다. return ResponseEntity.badRequest().build(); } return ResponseEntity.ok(event); //상태 코드 200으로 event를 응답 본문에 담아 보낸다. //아래 코드는 상태 코드를 CREATED(201)로 설정하여 보낸다. //return new ResponseEntity<Event>(event, HttpStatus.CREATED); } }
ResponseEntity는 응답 헤더, 본문 양식을 맞추어 반환하므로 @ResponseBody가 필요 없다.
따라서 @RestController 대신 @Controller를 등록해도 잘 동작한다.
@ResponseBody와 @ResponseEntity의 차이?
결과적으로 같은 기능을 하지만 구현 방법이 조금 틀리다.
@ResponseBody의 경우 파라미터로 객체를 받아 header를 변경하고,
@ResponseEntity의 경우 클래스 객체를 생성 후 객체에서 header 값을 변경한다.
@ResponseEntity는 응답을 보낼 때 헤더 및 상태 코드를 직접 다룰 때 사용한다.
반응형
블로그의 정보
슬기로운 개발생활
coco3o