-
custom validationTIL 2021. 4. 10. 14:14
이번 팀 프로젝트를 하면서 null검사를 진행하게 되었다.
근데 Enum type은 @Blank 등의 어노테이션이 동작하지 않았다.
enum 에는 적용할 수 없다는 것이다.
그럼 어떻게 해야 할까? 바로 custom validation 어노테이션을 만들어 검사를 진행하는 것이다.
www.baeldung.com/javax-validations-enums
Validations for Enum Types | Baeldung
Learn how to build validations for enums using Java custom annotations.
www.baeldung.com
www.baeldung.com/spring-mvc-custom-validator
Spring MVC Custom Validation | Baeldung
Learn how to build a custom validation annotation and use it in Spring MVC.
www.baeldung.com
9. Custom Class Level Validation 는 비밀번호 중복 검사와 같다. 새 비밀번호를 작성하는 데 2번 적어서 검사하는 것
1. 사용할 어노테이션 제작
2. 어노테이션에 사용할 검증 class 제작
실습
0. 문제는 status에 대한 검증이 필요했다.
물론 코드로 작성해도 되지만 어노테이션으로 검증을 진행하면 controller에서 @valid 통해 검사가 가능하다.
1.
ToDoStatusPattern 어노테이션 @Constraint를 통해 필드를 검증할 클래스를 정의했다.
message는 오류메시지이고 추가 코드는 spring 표준을 준수하는 대부분의 상용구 코드라는데
둘을 작성해야지 오류가 나지 않는다
groups는 유효성 검사가 어떤 상황에서 실행되는지 를 정의할 수 있다고 한다.
예로 create에만 valid를 , update시에만 valid를 , 두 상황 모두에 valid를 정의할 수 있다고 한다.
https://jongmin92.github.io/2019/11/21/Spring/bean-validation-2/ 우리의 예제는 다음과 같다.
CardController.class 에서 검사할꺼다. 위와 같으면 CardController에서 검사가 진행돼 우리가 원하는 데로 된다.
이곳에서 검사 가능해 위와 같이 이상한 곳의 class 그룹을 정해주면 우리는 controller에서 들어오는데 당연히 검사가 valid가 진행되지 않고 값이 DB에 써진다.
payload는 유효성 검사에 전달할 payload를 정의할 수 있다고 한다.
What is the use of groups and payload in custom Annotation In Java?
Here's My code , I tried reading many stuff online but was not able to understand actual use of Class [] groups() default{}; Class[] payload() default{}; Here is my
stackoverflow.com
jongmin92.github.io/2019/11/21/Spring/bean-validation-2/
Spring Boot에서의 Bean Validation (2)
해당 포스팅에서 사용된 예제 코드는 spring-boot validation example에서 확인 가능합니다.
jongmin92.github.io
2.
구현 class 정의
ConstraintValidator 인터페이스를 구현해야 하고 , isValid 메서드를 구현해야 한다.
ConstraintValidator는 <검증 어노테이션, 검증할 타입> 아마 @NouBlank가 enum에 안 먹히는 이유가 여기 있지 않을까 싶다.
isValid에서 value를 검사하면 된다.
value로 input값이 들어오게 되는데 여기서는 Pattern class로 정규식을 이용해 검사를 하고 있다.
coding-factory.tistory.com/529
[Java] 자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제
정규표현식(Regular Expression)이란 컴퓨터 과학의 정규언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 입니다. 개발을 하다보면 전화번호, 주민등
coding-factory.tistory.com
pattern으로 패턴을 정의하고 matcher로 검사
isValid에서 false가 나오면 검증 실패 true면 검증 성공이다.
위와 같이 사용하면 된다 이제
'TIL' 카테고리의 다른 글
AWS EC2에 spring boot와 mysql 배포하기 (0) 2021.04.11 2021.04.11 기록장 (0) 2021.04.10 2021.04.10 기록장 (0) 2021.04.09 2021.04.09 기록장 (0) 2021.04.09 2021.04.08 기록장 (0) 2021.04.07