슬기로운 개발생활

[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

활동하기