웹개발/Spring

Spring MVC(@RequestBody, HttpEntity, @ResponseBody, ResponseEntity)

간타타 2020. 7. 30. 20:27

이 내용은 인프런의 스프링 웹 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응답을 보냄