복붙노트

[SPRING] Spring에서 @Valid와 @Validated의 차이점

SPRING

Spring에서 @Valid와 @Validated의 차이점

Spring은 두 가지 유효성 검사 메소드 인 Spring 유효성 검사와 JSR-303 bean 유효성 검사를 지원합니다. 둘 모두는 bean validator를 포함한 다른 위임자에게 위임하는 Spring 유효성 검사기를 정의함으로써 사용될 수 있습니다. 여태까지는 그런대로 잘됐다.

그러나 실제로 유효성 검사를 요청하는 메소드에 주석을 달 때, 그것은 또 다른 이야기입니다. 나는 이렇게 주석을 달 수있다.

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {

또는 이와 같이

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {

여기에서 @Valid는 javax.validation.Valid이고 @Validated는 org.springframework.validation.annotation.Validated입니다. 후자에 대한 문서는 말한다

그것은 그것이 어떻게 다른지 정확히 말하지 않기 때문에별로 도움이되지 않습니다. 만약 그렇다면. 둘 다 나를 위해 꽤 잘 작동하는 것 같습니다.

해결법

  1. ==============================

    1.문서에서 인용 한 것처럼 "유효성 검증 그룹", 즉 유효성이 검증 된 bean의 필드 그룹을 지원하기 위해 @Validated가 추가되었습니다. 이것은 첫 번째 단계에서 이름, 전자 메일 등을 확인할 수있는 여러 단계 양식에서 사용할 수 있으며 다음 단계에서 다른 필드를 사용할 수 있습니다.

    문서에서 인용 한 것처럼 "유효성 검증 그룹", 즉 유효성이 검증 된 bean의 필드 그룹을 지원하기 위해 @Validated가 추가되었습니다. 이것은 첫 번째 단계에서 이름, 전자 메일 등을 확인할 수있는 여러 단계 양식에서 사용할 수 있으며 다음 단계에서 다른 필드를 사용할 수 있습니다.

    이것이 @Valid 어노테이션에 추가되지 않은 이유는 java 커뮤니티 프로세스 (JSR-303)를 사용하여 표준화 되었기 때문에 시간이 걸리고 Spring 개발자는 사람들이이 기능을 더 빨리 사용할 수 있기를 원했기 때문입니다.

    이 jira 티켓으로 이동하여 주석이 어떻게 생성되었는지 확인하십시오.

  2. ==============================

    2.보다 직선적 인 대답. 여전히 "검증 그룹"이 무엇인지 모르는 사람들에게.

    보다 직선적 인 대답. 여전히 "검증 그룹"이 무엇인지 모르는 사람들에게.

    @Valid 유효성 검사 사용법

    제어 장치:

    @RequestMapping(value = "createAccount")
    public String stepOne(@Valid Account account) {...}
    

    양식 객체 :

    public class Account {
    
        @NotBlank
        private String username;
    
        @Email
        @NotBlank
        private String email;
    
    }
    

    @ Validated Validation Group의 사용법 출처 : http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html

    제어 장치:

    @RequestMapping(value = "stepOne")
    public String stepOne(@Validated(Account.ValidationStepOne.class) Account account) {...}
    
    @RequestMapping(value = "stepTwo")
    public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account) {...}
    

    양식 객체 :

    public class Account {
    
        @NotBlank(groups = {ValidationStepOne.class})
        private String username;
    
        @Email(groups = {ValidationStepOne.class})
        @NotBlank(groups = {ValidationStepOne.class})
        private String email;
    
        @NotBlank(groups = {ValidationStepTwo.class})
        @StrongPassword(groups = {ValidationStepTwo.class})
        private String password;
    
        @NotBlank(groups = {ValidationStepTwo.class})
        private String confirmedPassword;
    
    }
    
  3. from https://stackoverflow.com/questions/36173332/difference-between-valid-and-validated-in-spring by cc-by-sa and MIT license