SpringMVC 검증 프레임워크 Validation 특수 사용법 자세히 보기
1. 그룹화
때때로 우리는 하나의 실체 클래스에 대해 다중 검증 방식을 필요로 한다. 서로 다른 상황에서 서로 다른 검증 방식을 사용한다. 예를 들어 하나의 실체 클래스에서 온 id에 대해 저장할 때 필요하지 않고 업데이트할 때 필수적이다. 다음과 같이 설정할 수 있다.
public class UserModel {
@NotNull(message = "{id.empty}", groups = { First.class })
private int id;
@NotNull(message = "{username.empty}", groups = { First.class, Second.class })
private String username;
@NotNull(message = "{content.empty}", groups = { First.class, Second.class })
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
public interface First {
}
public interface Second {
}
그룹을 통해 검증을 그룹으로 나누기controler의 코드는 다음과 같습니다.
@RequestMapping(value = "/save.action", method = RequestMethod.POST)
public String save(@Validated( { Second.class }) UserModel userModel, BindingResult result) {
if (result.hasErrors()) {
return "validate/error";
}
return "redirect:/success";
}
@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String update(@Validated( { First.class, Second.class }) UserModel user, BindingResult result) {
if (result.hasErrors()) {
return "validate/error";
}
return "redirect:/success";
}
2. 그룹 시퀀스기본적으로 서로 다른 그룹의 제약 검증은 무질서하지만 일부 상황에서 제약 검증의 순서는 매우 중요하다. 예를 들어 다음과 같은 두 가지 예가 있다. (1) 두 번째 그룹의 제약 검증은 하나의 안정 상태에 의존하여 운행하고 이 안정 상태는 첫 번째 그룹에서 검증한다.(2) 어떤 그룹의 검증은 비교적 시간이 걸리고 CPU와 메모리의 사용률이 비교적 높으며 가장 좋은 선택은 그것을 마지막에 놓고 검증하는 것이다.따라서 그룹 검증을 할 때 질서정연한 검증 방식을 제공해야 하기 때문에 그룹 서열의 개념을 제시했다.
한 그룹은 다른 그룹의 서열로 정의할 수 있으며, 그것을 사용하여 검증할 때 반드시 이 서열에 규정된 순서에 부합해야 한다.그룹 시퀀스 검증을 사용할 때 시퀀스 앞부분의 그룹 검증이 실패하면 뒤의 그룹은 더 이상 검증을 하지 않습니다.
다음 예제에서는 그룹 그룹A를 설명합니다.class,GroupB.class와 Group.class, 그중default, GroupA, GroupB는 모두 그룹의 서열이다.
public interface GroupA {
}
public interface GroupB {
}
@GroupSequence( { Default.class, GroupA.class, GroupB.class })
public interface Group {
}
public class User {
@NotEmpty(message = "firstname may be empty")
private String firstname;
@NotEmpty(message = "middlename may be empty", groups = Default.class)
private String middlename;
@NotEmpty(message = "lastname may be empty", groups = GroupA.class)
private String lastname;
@NotEmpty(message = "country may be empty", groups = GroupB.class)
private String country;
}
[java] view plain copy CODE
@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String register(@Validated(Group.class) User user, BindingResult result) {
if (result.hasErrors()) {
return "validate/error";
}
return "redirect:/success";
}
3. 여러 객체 확인하나의 기능 처리 방법에서 여러 모델 대상을 검증해야 할 때 다음과 같은 형식으로 검증 결과를 얻어야 한다.
@RequestMapping("/validate/multi")
public String multi(@Valid @ModelAttribute("a") A a, BindingResult aErrors, @Valid @ModelAttribute("b") B b, BindingResult bErrors) {
if (aErrors.hasErrors()) { // a
return "validate/error";
}
if (bErrors.hasErrors()) { // a
return "validate/error";
}
return "redirect:/success";
}
모든 모델 대상의 뒤쪽은 Errors나 BindingResult 대상과 함께 검증 결과를 저장해야 하며, 방법체 내부에서는 이 두 개의 검증 결과 대상을 사용하여 오류가 발생했을 때 점프하는 페이지나 처리 논리를 선택할 수 있다.4. Junit 테스트
사용자 정의 확장 Validation 에서는 다음과 같은 방법으로 테스트를 수행할 수 있습니다.
@Test
public void testValidate() {
AnnotationDescriptor<EqualsAny> descriptor = new AnnotationDescriptor<EqualsAny>(EqualsAny.class);
EqualsAny equalsAny = AnnotationFactory.create(descriptor);
EqualsAnyValidator equalsAnyValidator = new EqualsAnyValidator();
equalsAnyValidator.initialize(equalsAny);
Assert.assertTrue(equalsAnyValidator.isValid("123", null));
}
또한 스프링이 사용자 정의 JSR-303 제한 형식에 대한 지원의 새로운 특성을 말하자면, 스프링 지원은 Constraint Validator에 bean 대상을 주입하는 것이다.예를 들어 Equals AnyValidator에서 @Resource 메모를 사용하여 다른 Bean 객체를 주입합니다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.