728x90 반응형 분류 전체보기582 [Spring] 수정화면에 Bean Validation 적용 ValidationItemControllerV3 - edit() 변경 @GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "validation/v3/editForm"; } @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) { // 특.. 2023. 10. 10. [Spring] Bean Validation 에러 코드 및 오브젝트 오류 처리 Bean Validation이 기본으로 제공하는 오류 메시지를 좀 더 자세히 변경하고 싶으면 어떻게 하면 될까? Bean Validation을 적용하고 bindingResult 에 등록된 검증 오류 코드를 보면, 오류 코드가 애노테이션 이름으로 등록된다. 마치 typeMismatch 와 유사하다. NotBlank 라는 오류 코드를 기반으로 MessageCodesResolver 를 통해 다양한 메시지 코드가 순서대로 생성된다. @NotBlank - NotBlank.item.itemName - NotBlank.itemName - NotBlank.java.lang.String - NotBlank @Range - Range.item.price - Range.price - Range.java.lang.Intege.. 2023. 10. 10. [Spring] Bean Validation 스프링 적용 기존에 했던 것을 살리고, 새로운 버전을 적용하기 위하여 컨트롤러를 복사하여 새로운 버전을 만든다. URL 경로 변경: validation/v2/ → validation/v3/ validation/v2 디렉토리의 모든 템플릿 파일을 validation/v3 디렉토리로 복사 /resources/templates/validation/v2/ → /resources/templates/validation/v3/ /resources/templates/validation/v3/ 하위 4개 파일 모두 URL 경로 변경: validation/v2/ → validation/v3/ 파일의 상위 디렉토리를 지정하고, ctrl + shift + R 을 누르면 한꺼번에 변경이 가능하다 ValidationItemController.. 2023. 10. 5. [Spring] 검증 로직을 편리하게 하는 BeanValidation으로 검증하기 검증 기능을 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증로직은 대부분 빈 값인지, 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. package hello.itemservice.domain.item; import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data public class Item { private Long id; @NotBlank priv.. 2023. 10. 5. [Spring] 복잡한 검증 로직을 별도로 분리하여 Validator 생성하기 컨트롤러에서 검증 로직이 차지하는 부분은 매우 크다. 이런 경우 별도의 클래스로 역할을 분리하는 것이 좋다. 그리고 이렇게 분리한 검증 로직을 재사용 할 수도 있다 Validator를 직접 생성해서 호출해보고, 스프링이 제공하는 Validator를 사용해보자. ItemValidator 생성 package hello.itemservice.web.validation; import hello.itemservice.domain.item.Item; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; .. 2023. 10. 5. [Spring] errors 오류 코드 관리 전략과 타입 오류 처리 + ValidationUtils 사용 오류 코드 관리 전략의 핵심은 구체적인 것에서 덜 구체적인 것으로 정의하는 것이다. MessageCodesResolver 는 required.item.itemName 처럼 구체적인 것을 먼저 만들어주고, required 처럼 덜 구체적인 것을 가장 나중에 만든다. 이렇게 하면 앞서 말한 것 처럼 메시지와 관련된 공통 전략을 편리하게 도입할 수 있다. 모든 오류 코드에 대해서 메시지를 각각 다 정의하기가 힘들다 크게 중요하지 않은 메시지는 범용성 있는 required 같은 메시지로 끝내고, 정말 중요한 메시지는 꼭 필요할 때 구체적으로 적어서 사용하는 방식이 더 효과적이다. errors.properties #required.item.itemName=상품 이름은 필수입니다. #range.item.price=.. 2023. 10. 4. 이전 1 ··· 4 5 6 7 8 9 10 ··· 97 다음 728x90 반응형