728x90 반응형 스프링187 [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. [Spring] 오류 메시지 코드 단계 우선 순위 및 검증 오류 코드로 메시지 코드를 생성하는 MessageCodesResolver 오류 코드를 만들 때 다음과 같이 자세히 만들 수도 있다. required.item.itemName = 상품 이름은 필수입니다. range.item.price = 상품의 가격 범위 오류입니다. 또는 아래처럼 단순하게 만들 수도 있다. required = 필수 값 입니다. range = 범위 오류입니다. 단순하게 만들면 범용성이 좋아서 여러 곳에서 사용할 수 있지만, 메시지를 세밀하게 작성하기 어렵다. 반대로 너무 자세하게 만들면 범용성이 떨어진다. 가장 좋은 방법은 범용성으로 사용하다가, 세밀하게 작성해야 하느 ㄴ경우 세밀한 내용이 적용되도록 메시지에 단계를 두는 방법이다. 예를 들어서 required 라고 오류 코드를 사용한다고 가정해보자. 다음과 같이 required 라는 메시지만 있으면 이 메시지를.. 2023. 9. 27. 이전 1 ··· 3 4 5 6 7 8 9 ··· 32 다음 728x90 반응형