@Valid와 @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다.
@ModelAttrubute는 HTTP 요청 파라미터(URP 쿼리 스트링, POST Form)를 다룰 때 사용하고 @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다.
@Slf4j
@RestController
@RequestMapping("/validation/api/items")
public class ValidationItemApiController {
@PostMapping("/add")
public Object addItem(@RequestBody @Validated ItemSaveForm form, BindingResult bindingResult) {
log.info("API 컨트롤러 호출");
이렇게 컨트롤러를 만들어주고 PostMan을 사용해서 테스트를 했다.
Json으로 보냈는데 API경우 3가지 경우를 나눠 생각해야 한다고 한다. 성공 요청을 성공하는 것과 실패 요청을 JSON을 객체로 생성하는 것 자체가 실패한 것과 검증 오류 요청을 JSON을 객체로 생성하는 것은 성공했지만 검증에서 실패한 것 이렇게 3개이다.
결과적으로는 모두 다 테스트를 해 봤는데 @ModelAttribute와 @RequestBody 차이에 있었다.
HTTP 요청을 처리하는 @ModelAttribute는 필드 단위로 세밀하게 적용되어 특정 필드에 타입이 맞지 않는 오류가 발생해도 나머지 필드는 정상적으로 처리할 수 있었다.
는 @ModelAttribute와 다르게 전체 객체 단위로 적용되기 때문에 컨버터의 작동이 성공해서 Item 객체를 만들어야 @Valid와 @Validated가 적용이 되었다.
즉, DTO 객체에서 정의한 값과 맞지 않으면 컨트롤러 호출 자체가 되지 않았고, 값과 맞춰야 성공을 했다. 값과 맞췄는데 실패하는 경우는 검증에서 실패한 경우이다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 로그인 기능 구현하기 (0) | 2022.02.17 |
---|---|
[Spring Boot] : 회원 가입 기능 구현하기 (0) | 2022.02.17 |
[Spring Boot] : Form 전송 객체 분리하여 개발하기 (0) | 2022.02.17 |
[Spring Boot] : Bean Validation 한계와 해결하기 위한 groups (0) | 2022.02.16 |
[Spring Boot] : Bean Validation 수정에 적용하기 (0) | 2022.02.16 |
댓글