ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC(@RequestBody, HttpEntity, @ResponseBody, ResponseEntity)
    웹개발/Spring 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응답을 보냄

Designed by Tistory.