💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
[Bean Validation - HTTP 메시지 컨버터]
@Valid , @Validated 는 HttpMessageConverter ( @RequestBody )에도 적용할 수 있다.
- @ModelAttribute 는 HTTP 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용한다.
- @RequestBody 는 HTTP Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용한다.
[포스트맨을 사용한 메시지 컨버터 검증]
API의 경우 3가지 경우를 나누어 생각해야 한다.
- 성공 요청: 성공
- 실패 요청: JSON을 객체로 생성하는 것 자체가 실패(controller 실행 X)
- 검증 오류 요청: JSON을 객체로 생성하는 것은 성공했고, 검증에서 실패
package hello.itemservice.web.validation;
import hello.itemservice.domain.item.Item;
import hello.itemservice.web.validation.form.ItemSaveForm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/validation/api/items")
public class ValidationItemApiController {
//@ResponseBody RestController의 경우 자동으로 붙음
@PostMapping("/add")
public Object addItem(@RequestBody @Validated ItemSaveForm form, BindingResult bindingResult){
log.info("API 컨트롤러 호출");
if(bindingResult.hasErrors()) {
log.info("검증 오류 발생 errors = {}" ,bindingResult);
return bindingResult.getAllErrors();
}
log.info("성공 로직 실행");
return form;
}
}
[성공]
[실패]
- HttpMessageConverter 에서 요청 JSON을 Item 객체로 생성하는데 실패한다.
- 이 경우는 Item 객체를 만들지 못하기 때문에 컨트롤러 자체가 호출되지 않고 그 전에 예외가 발생한다.
- 물론 Validator도 실행되지 않는다
- 이는 예외처리 관련 강의에서 처리 방법을 알려준다고 한다.
[검증 오류 요청]
JSON을 객체로 생성하는 것은 성공했고, 검증에서 실패
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC2][로그인 처리] - 회원가입 처리 (0) | 2022.05.13 |
---|---|
[Spring MVC2][로그인 처리] - 디렉토리(directory) 방향 (0) | 2022.05.13 |
[Spring MVC2][검증2(Validation)] - Form 전송 객체 분리 (0) | 2022.05.05 |
[Spring MVC2][검증2(Validation)] - Bean Validation - groups (0) | 2022.05.03 |
[Spring MVC2][검증2(Validation)] - Bean Validation (0) | 2022.05.03 |