BindResult 삽질기!!!


회사 동료가 Spring Validation 기능을 활용해보자고 해서 해보는데 엄청난 시간 소모가...

결론은 BindResult 파라미터 선언을 @Valid 바로 뒤에 해야 한다는...


[TestWeb.java]

import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("test")
public class TestWeb {
	private static Logger log = LoggerFactory.getLogger(TestWeb.class);

	@RequestMapping(value="case1", method=RequestMethod.GET)
	public String test(@Valid TestVo testVo, BindingResult bindResult, Model model) {
		log.debug("bindResult.hasErrors(): {}", bindResult.hasErrors());
		if (bindResult.hasErrors()) {
			throw new RuntimeException("파라미터 설정이 잘 못 되었습니다..");
			//return "coupon/mainError";	// 공통 Exception 처리 Throws 하거나 에러 뷰 return
		}
		return "test/case1";
	}
	
	
	
}

[TestVo.java]

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class TestVo {
	@Size(min=0, max=5)
	private String test1;
	
	@NotNull
	private String test2;
}

[build.gradle]

dependencies {
	compile 'spring.... 4.1.x...'
	compile 'org.hibernate:hibernate-validator:5.1.3.Final'
}

// str은 0~9까지 숫자만 가능하다.
function checkNumber(str) {
    var flag=true;
    if (str.length > 0) {
        for (i = 0; i < str.length; i++) { 
            if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                flag=false;
            }
        }
    }
    return flag;
}

// str은 모두 소문자여야하고 첫글자는 영문이어야 한다. 영문과 0~9, -, _, ^는 허용한다.
function CheckChar(str) {
    strarr = new Array(str.length);
    var flag = true;
    for (i=0; i<str.length; i++) {
        strarr[i] = str.charAt(i)
        if (i==0) {
            if (!((strarr[i]>='a')&&(strarr[i]<='z'))) {
                flag = false;
            }
        } else {
            if (!((strarr[i]>='a')&&(strarr[i]<='z')||(strarr[i]>='0')&&(strarr[i]<='9')||(strarr[i]=='-')||(strarr[i]=='_')||(strarr[i]=='^'))) {
                flag = false;
            }
        }
    }
    if (flag) {
        return true;
    } else {
        return false;
    }
}

// str은 모두 영문소문자여야 한다.
function CheckChar2(str) {
    strarr = new Array(str.length);
    var flag = true;
    for (i=0; i<str.length; i++) {
        strarr[i] = str.charAt(i)
        if (!((strarr[i]>='a')&&(strarr[i]<='z'))) {
            flag = false;
        }
    }
    if (flag) {
        return true;
    } else {
        return false;
    }
}

// 이메일 체크
function CheckMail(strMail) {
   /** 체크사항
     - @가 2개이상일 경우
     - .이 붙어서 나오는 경우
     -  @.나  .@이 존재하는 경우
     - 맨처음이.인 경우
     - @이전에 하나이상의 문자가 있어야 함
     - @가 하나있어야 함
     - Domain명에 .이 하나 이상 있어야 함
     - Domain명의 마지막 문자는 영문자 2~4개이어야 함 **/

    var check1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; 

    var check2 = /^[a-zA-Z0-9\-\.\_]+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4})$/;
    
    if ( !check1.test(strMail) && check2.test(strMail) ) {
        return true;
    } else {
        return false;
    }
}

// str은 한글이어야만 한다.
function CheckHangul(str) {
    strarr = new Array(str.length);
    schar = new Array('/','.','>','<',',','?','}','{',' ','\\','|','(',')','+','=');
    flag = true;
    for (i=0; i<str.length; i++) {
        for (j=0; j<schar.length; j++) {
            if (schar[j] ==str.charAt(i)) {
                flag = false;
            }
        }
        strarr[i] = str.charAt(i)
        if ((strarr[i] >=0) && (strarr[i] <=9)) {
            flag = false;
        } else if ((strarr[i] >='a') && (strarr[i] <='z')) {
            flag = false;
        } else if ((strarr[i] >='A') && (strarr[i] <='Z')) {
            flag = false;
        } else if ((escape(strarr[i]) > '%60') && (escape(strarr[i]) <'%80') ) {
            flag = false;
        }
    }
    if (flag) {
        return true;
    } else {
        return false;
    }
    
}

+ Recent posts