-
Validation에서 에러 문구 설정개발/Spring 2023. 6. 20. 13:15
ㅅ 필요한 값을 넣지 않으면 DB에 데이터가 저장되지 않아야 하고 화면에서는 가이드를 줄 수 있으면 좋다.
가장 간단하고 쉬운 검증 방법은 DTO에 애노테이션을 붙이는 것이다.
@Data public class ItemSaveForm { @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(value = 9999) private Integer quantity; public ItemSaveForm(String itemName, @NotNull Integer price, @NotNull Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } }
그다음으로 설정할 수 있는 것이 문구인데, 문구를 설정하기에 앞서 해당 문구를 저장하는 키(정확히는 코드)가 어떻게 생성되는지 알아야 한다. itemName에 적용된 @NotBlank로 살펴보자. 필드 에러가 발생하면 스프링은 FieldError 객체를 생성해 BindngResult 객체에 넣어준다. 로그를 통해 오류 메시지를 확인할 수 있다.
Field error in object 'item' on field 'itemName': rejected value []; codes [NotBlank.item.itemName,NotBlank.itemName,NotBlank.java.lang.String,NotBlank]
이 예제에서는 타임리프를 사용하고 있어서, 타임리프에서 설정한 object인 'item'이 보이고(Model 객체에 속성을 추가할 때의 key인데 이는 타임리프, JSP 같은 SSR에서만 활용 가능), 그다음에 필드명인 itemName이 나온다. 이는 input 태그에서 name 속성에 해당한다. codes 배열을 보면 문구를 저장하는 네이밍 규칙을 알 수 있다. 자세한 이름일수록 우선순위가 높다. 순서대로 탐색하므로 단계에 맞춰서 오류 문구를 지정할 수 있다. resources 폴더 바로 아래에 errors.properties 파일을 만들어 설정한다.
NotBlank.item.itemName=상품 이름을 적어주세요.
필드를 검증할 때 필드 값에 맞는 적절한 애노테이션을 써주고(문서 참고), 코드 네이밍 규칙을 활용하여 errors.properties에 문구를 설정한다. 참고로 검증을 통과하지 못했을 때 다시 뷰를 보여줘야 하는데 입력 값을 유지하는 건 SSR에서는 Model을 통해 값을 사용하면 될 거고 REST API에서는 리액트 같은 SPA 프레임워크를 사용하면 화면이 새로고침 되지 않으므로 값이 유지될 거다.
'개발 > Spring' 카테고리의 다른 글
application.properties의 유용한 설정 (0) 2023.06.26 세션 인증 때 커스텀 애노테이션 적용하기 (0) 2023.06.26 컨트롤러(핸들러)가 조회되는 과정 (2) 2023.06.11 빈 스코프(Singleton, Prototype) (1) 2023.05.16 @Configuration (0) 2023.05.10