[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는 응답을 보낼 때 헤더 및 상태 코드를 직접 다룰 때 사용한다.
반응형
'🌈Programming > Spring' 카테고리의 다른 글
[Spring] 빈 생명주기(Bean LifeCycle) 콜백 알아보기 (1) | 2022.04.08 |
---|---|
[Spring] Model 객체와 @ModelAttribute 어노테이션 (1) | 2021.08.25 |
[Spring] @RequestBody와 @ResponseBody 개념 알아보기 (0) | 2021.08.11 |
[Spring] @RequestMapping 간단 정리 (0) | 2021.07.27 |
DTO와 VO 그리고 Entity 차이점 알아보기 (0) | 2021.07.26 |
블로그의 정보
슬기로운 개발생활
coco3o