나는 당신의 질문이 어디로 향하고 있는지 알고 있다고 생각합니다. 그리고이 질문은 구글 검색 결과에 나타나는 질문이기 때문에 @Valid 주석이하는 일에 대해 평범한 답변을 드릴 수 있습니다.
@Valid를 어떻게 사용했는지에 대한 3 가지 시나리오를 제시하겠습니다.
모델:
public class Employee{
private String name;
@NotNull(message="cannot be null")
@Size(min=1, message="cannot be blank")
private String lastName;
}
JSP :
...
<form:form action="processForm" modelAttribute="employee">
<form:input type="text" path="name"/>
<br>
<form:input type="text" path="lastName"/>
<form:errors path="lastName"/>
<input type="submit" value="Submit"/>
</form:form>
...
시나리오 1의 컨트롤러 :
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
이 시나리오에서는 lastName 필드가 비어있는 양식을 제출 한 후 유효성 검사 규칙을 적용하고 있지만 전혀 처리하지 않기 때문에 오류 페이지가 표시됩니다.
해당 오류의 예 :
예외 페이지
시나리오 2 용 컨트롤러 :
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
이 시나리오에서는 해당 유효성 검사의 모든 결과를 bindingResult로 전달하므로 해당 양식의 유효성 검사 결과로 수행 할 작업을 결정하는 것은 사용자에게 달려 있습니다.
시나리오 3 용 컨트롤러 :
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> invalidFormProcessor(MethodArgumentNotValidException ex){
}
이 시나리오에서는 여전히 첫 번째 시나리오에서와 같이 오류를 처리하지 않지만 양식 모델을 처리 할 때 @Valid가 트리거 하는 예외를 처리 할 다른 메서드로 전달합니다 . 이것을 확인 하고 매핑으로 무엇을 할 것인지 확인 하십시오.
요약하자면, @Valid 자체적으로 유효성 검사 JSR 303 주석 필드 ( @NotNull, @Email, @Size 등 ... ) 의 유효성 검사를 트리거하는 작업을 수행하지 않고 수행 할 작업에 대한 전략을 지정해야합니다. 상기 검증 결과와 함께.
이것에 걸려 넘어 질 수있는 사람들을 위해 내가 뭔가를 클리어 할 수 있기를 바랍니다.
@Valid
에ApplicationForm
아직 검증이에 발사 된 매개 변수 만date
(세트로null
) 필드. 설명 해주십시오.