client가 값을 입력할 때, 혹시 오류가 발생하는지 그 처리를 제대로 해 주었는지 확인하는 작업이다.
@Valid를 사용한다.
<TestController.java>
@GetMapping("/input_pro")
public String input_pro(@Valid DataBean1 dataBean1, BindingResult result){
System.out.println(dataBean1.getData1());
System.out.println(dataBean1.getData2());
if(result.hasErrors()){
for(ObjectError obj : result.getAllErrors()) {
System.out.println(obj.getDfaultMessage());
System.out.println(obj.getCode());
System.out.println(obj.getObjectName());
String[] codes=obj.getCodes();
for(String c1 : codes){
System.out.println(c1);
}
if(codes[0].equals("Size.dataBean1.data1")) {
System.out.println("data1은 2~10 글자를 담을 수 있습니다.");
} else if(codes[0].equals("Max.dataBean1.data2")){
System.out.println("Max 100 이상을 넘을 수 없습니다.");
}
}
return "input_data";
}
return "input_success";
================================================
<DataBean1.java>
@Size(min=2, max=10)
private String data1;
@Max(100)
private int data2;
...
파라미터에 (DataBean1 dataBean1)만 입력해도 modelAttribute로 값이 넘어온다는 것을 알 수 있다. @ModelAttribute 대신에 @Valid를 넣으면, 유효성을 검사하겠다는 의미이다. 또한 뒤에 BindingResult result를 적어서 오류가 난다면 그 결과를 표시할 수 있다.
오류가 발생할 때, 해당 오류를 보는 코드들이 여러개 있으며 결과에 따라 return이 바뀐다.
data1 : <input type="text" name="data1"/><br/>
<spring:hasBindErrors name="dataBean1">
<c:if test="${errors.hasFieldErrors('data1') }">
${errors.getFieldError('data1').defaultMessage }
</c:if>
</spring:hasBindErrors>
jsp 파일에서도, error가 있는 경우 처리하게 해준다. spring으로 error를 처리해주며, c를 통해 if문을 사용한다.
반응형
'Spring > Spring MVC 5' 카테고리의 다른 글
JSR-303 / JSR-383 (0) | 2020.05.27 |
---|---|
에러 메시지 커스터마이징 (0) | 2020.05.27 |
Properties / Message (0) | 2020.05.27 |
RequestScope 빈 주입 (0) | 2020.05.26 |
RequestScope (0) | 2020.05.26 |