오랫만에 자바 스프링부트에서 하나 배워서 기억하고자 포스팅.. ㅋ
클라이언트에서 숫자만 입력해야하는 필드에 특정한 문자를 넣을 수 있다.
물론 js에서 검사는 해주지만.. 근데 요게 피할 수 있네?
어떻게하면 될까.. 저장할때마다 각 페이지별로 한땀한땀?
싫다.. 그럼 유지보수할때 고통스럽다. 난 게으른 개발자가 되고싶지 성실하고 오래 일하는 개발자이고싶지 않다.
근데 Validation애노테이션이 있네?
나처럼 숫자가 입력이 되어야하는 사람들, 또는 이메일 형식, 과거 또는 미래, 특정 형식이 필요한 사람들은
Validation애노테이션을 쓰면 매우 유용하다.
Validation 애노테이션은.. DTO에 붙여준다. 종류는 엄청 많아서 몇가지만 추렸다. 자세한 내용은 여기 참고
애노테이션 이름 | 비고 |
@NotNull | Null안됨 |
@NotEmpty | Null, Empty ( "" ) 안됨. 공백도 허용하고싶지 않으면 @NotEmpty로 |
@Decimal | 숫자 허용. BigDecimal, BigInteger, byte, short, int, long에만 적용가능 |
@Positive | 0을 제외한 양수만 허용.BigDecimal, BigInteger, byte, short, int, long에만 적용가능. |
@PositiveOrZero | 0을 포함한 양수만 허용.BigDecimal, BigInteger, byte, short, int, long에만 적용가능 |
@Negative | 0을 제외한 음수만 허용.BigDecimal, BigInteger, byte, short, int, long에만 적용가능. |
@NegativeOrZero | 0을 포함한 음수만 허용.BigDecimal, BigInteger, byte, short, int, long에만 적용가능 |
이메일 형식 | |
@Pattern | 정규식. 만약 데이터 타입이 String인데, 숫자형만 받아야한다면 위의 decimal, positive, negative등은 사용불가다. 타입이 안맞으니까. 그럴땐 @Pattern애노테이션을 이용하자. 정규식을 쓰면 된다. @Pattern(regexp="[0-9]") << 이렇게. |
@Past | 과거. 미래는 @Future. datetime, calendar등에만 적용가능 |
@PastOrPresent | 과거 또는 현재날짜. 미래는 @FutureOrPresent. datetime, calendar등에만 적용가능 |
@Length | 길이제한. min, max별로 설정 가능. min default는 0 |
이렇게 DTO에 Validation을 위한 애노테이션을 추가하였으면.. 검사해달라고 요청해야 검사할것 아닌가?
검사해달라는 요청은 Controller에서 처리해주면 된다.
@RequestMapping("MyURL", method = 내메소드)
public @ResponseBody T MyMethod(@Valid MyClass class, BindingResult bindingResult){
//To-do actions.
}
파라미터로 전달되는 DTO앞에 '@Valid' 을 붙여주자. 검사해준다.
BindingResult를 사용하여 확인할 수 있다. 만약 BindingResult가 없으면 바로 exception 발생한다.
참.. 근데 @Valid를 붙인 파라미터 바로 뒤에 BindingResult가 붙어야.
BindingResult로 결과가 전달된다.
아니면 Exception발생
반응형
댓글