Spring/Spring MVC 5

유효성 검사

코동이 2020. 5. 27. 10:28

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문을 사용한다.

반응형