Spring은 Spring 유효성 검사와 JSR-303 빈 유효성 검사의 두 가지 다른 유효성 검사 방법을 지원합니다. 둘 다 빈 유효성 검사기를 포함하여 다른 위임자에게 위임하는 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 입니다. 후자에 대한 문서는
검증 그룹의 사양을 지원하는 JSR-303의 유효한 변형입니다. Spring의 JSR-303 지원과 함께 편리하게 사용하도록 설계되었지만 JSR-303에만 해당되지는 않습니다.
그것이 어떻게 다른지 정확히 말해주지 않기 때문에별로 도움이되지 않습니다. 만약 그렇다면. 둘 다 나를 위해 꽤 잘 작동하는 것 같습니다.
답변
문서에서 인용했듯이 @Validated
“검증 그룹”, 즉 검증 된 빈의 필드 그룹을 지원하기 위해 추가되었습니다. 이것은 첫 번째 단계에서 이름, 이메일 등을 확인한 다음 다음 단계에서 다른 필드를 확인할 수있는 다단계 양식에서 사용할 수 있습니다.
이것이 @Valid
주석에 추가되지 않은 이유 는 자바 커뮤니티 프로세스 (JSR-303)를 사용하여 표준화 되었기 때문에 시간이 걸리고 Spring 개발자는 사람들이이 기능을 더 빨리 사용할 수 있기를 원했기 때문입니다.
이 jira 티켓 으로 이동 하여 주석이 어떻게 생성되었는지 확인하십시오.
답변
더 직접적인 대답. 아직도 도대체 무엇이 “검증 그룹” 인지 모르는 사람들을 위해 .
@Valid
검증을 위한 사용법
제어 장치:
@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}
양식 개체 :
public class Account {
@NotBlank
private String username;
@Email
@NotBlank
private String email;
}
에 대한 사용 @Validated
확인 그룹
출처 : 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;
}
답변
예제 코드에서 질문의 코드 조각 @Valid
과 @Validated
아무런 차이도하지 않습니다. 그러나 @RequestBody
에 List
객체 로 주석이 추가 되거나로 주석이 달린 문자열 값인 @RequestParam
경우 유효성 검사가 적용되지 않습니다.
우리는 사용할 수 있습니다 @Validated
작동하도록의 메소드 레벨의 검증 기능을. 이를 달성하기 위해 핵심 @Validated
은 수업 에 배치 하는 것입니다. 이 사이 또 다른 중요한 차이가있을 수 있습니다 @Valid
및 @Validated
스프링 프레임 워크입니다.
굴절
답변
위 외에도 @Valid
중첩 된 유효성 검사를 위해 도메인 / 필드 에만 적용 할 수 있으며 @validated
.