✔ 웹 서비스는 폼 입력시 오류가 발생하면, 사용자가 입력한 데이터를 유지한 상태로 어떤 오류가 발생하였는지 알려줘야된다.
- 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다.
- 정상 로직보다 검증 로직을 잘 개발하는것이 무척 중요하다.
- 클라이언트 검증은 조작할 수 있음으로, 보안에 취약하다.
- 서버만으로 검증하면, 즉각적인 고객 사용성이 부족하다.
- 둘을 적절히 섞어 사용하되, 최종적으로는 "서버 검증은 필수"이다
- API 방식을 사용하면, API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨줘야된다.
StringUtils.hasText(...)
사용하여 검증
- 예시
- @Getmapping이
new Item()
이라는 빈 (깡통) 객체를 모델에 담아주어서, 값의 재사용이 가능하다.
BindingResult
가 Map<String,String> errors = new HashMap<>();
역할을 한다.
- 📍 주의사항
public String addItem(@ModelAttribute Item item, BindingResult bindingResult)
// BindingResult는 @ModelAttribue 다음으로 선언되어야한다.- 예시
- ObjectName = @ModelAttribute의 객체
✔ 위에서 했던 !errors.isEmpty()
가 아닌, bindingResult.hasErrors()
로 검증의 실패를 조회한다.
타임리프는 스프링의 BindingResult를 활용하여 검증오류를 편리하게 하는 기능을 제공한다.
#fields
: 검증 오류에 접근할수있다.
#th:errors
: 해당 필드에 오류가 있는 경우에 태그를 출력한다.
#th:errorclass
: th:field에서 지정한 필드에 오류가 있으면 class 정보를 추가한다.