본문 바로가기
Programming/Java_Spring

Java springboot. Validation

by 곰네Zip 2022. 7. 20.

오랫만에 자바 스프링부트에서 하나 배워서 기억하고자 포스팅.. ㅋ

 

클라이언트에서 숫자만 입력해야하는 필드에 특정한 문자를 넣을 수 있다.

물론 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에만 적용가능
@Email 이메일 형식
@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발생

 

반응형

댓글