Spring MVC 2편 검증(Validation) 사항

신재원·2023년 2월 6일
0

Spring MVC 2편

목록 보기
6/26

📌 검증 사항

  • 폼 입력시 숫자를 문자를 잘못입력하는 시나리오
    • 검증 오류가 발생하면, 오류 화면 (bad request)으로 바로 넘어가게된다.

✔ 웹 서비스는 폼 입력시 오류가 발생하면, 사용자가 입력한 데이터를 유지한 상태로 어떤 오류가 발생하였는지 알려줘야된다.

  • 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다.
  • 정상 로직보다 검증 로직을 잘 개발하는것이 무척 중요하다.

📍 참고 : 클라이언트 검증, 서버검증

  • 클라이언트 검증은 조작할 수 있음으로, 보안에 취약하다.
  • 서버만으로 검증하면, 즉각적인 고객 사용성이 부족하다.
  • 둘을 적절히 섞어 사용하되, 최종적으로는 "서버 검증은 필수"이다
  • API 방식을 사용하면, API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨줘야된다.

문자열 유효성 검증 유틸 메서드

  • StringUtils.hasText(...) 사용하여 검증
    • key, value 값을 Map에 보관한다.
  • !! 중요 📌 검증에서 통과하지 못하면 Model에 값을 다시 담아 @Getmapping 했던 (에러가 발생한 폼으로) HTML로 return을 해줘야된다.
    • 예시
  • @Getmapping이 new Item() 이라는 빈 (깡통) 객체를 모델에 담아주어서, 값의 재사용이 가능하다.

📌 스프링이 제공하는 검증 오류 처리 방법 (실무에서 많이 사용)

  • 핵심은 "BindingResult"
    BindingResultMap<String,String> errors = new HashMap<>(); 역할을 한다.
  • 📍 주의사항
    public String addItem(@ModelAttribute Item item, BindingResult bindingResult) // BindingResult는 @ModelAttribue 다음으로 선언되어야한다.
  • 예시
  • ObjectName = @ModelAttribute의 객체

✔ 위에서 했던 !errors.isEmpty()가 아닌, bindingResult.hasErrors()로 검증의 실패를 조회한다.

  • Model에 값을 안담아도 자동으로 담아진다. (model.addAttribute 생략)

타임리프는 스프링의 BindingResult를 활용하여 검증오류를 편리하게 하는 기능을 제공한다.
#fields : 검증 오류에 접근할수있다.
#th:errors: 해당 필드에 오류가 있는 경우에 태그를 출력한다.
#th:errorclass : th:field에서 지정한 필드에 오류가 있으면 class 정보를 추가한다.

0개의 댓글