Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Greedy
- Spring Boot
- JDBC
- pointcut
- JPQL
- 알고리즘
- 스프링 핵심 원리
- kotlin
- transaction
- Proxy
- 자바
- http
- AOP
- 김영한
- java
- Android
- jpa
- Servlet
- 인프런
- 스프링
- springdatajpa
- 그리디
- Thymeleaf
- Exception
- QueryDSL
- db
- SpringBoot
- spring
- 스프링 핵심 기능
- 백준
Archives
- Today
- Total
개발자되기 프로젝트
JSR-380 Bean Validation : custom annotaion 본문
인프런/[인프런] Kotlin으로 개발하는 Spring Boot Web MVC
JSR-380 Bean Validation : custom annotaion
Seung__ 2022. 4. 25. 00:02앞선 글과 같이 생성일자의 경우 여기저기서 많이 사용한다.
매 번 만들어서 적용하기는 너무 불편하다.
custom annotaion을 만들어서 적용을 해보자.
1. annotaion
import com.example.kotlinspring.validator.StringFormatDateTimeValidator
import javax.validation.Constraint
import javax.validation.Payload
import kotlin.reflect.KClass
@Constraint(validatedBy = [StringFormatDateTimeValidator::class]) //어떤 validator?
@Target( //적용할 대상
AnnotationTarget.FIELD,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER
)
@Retention(AnnotationRetention.RUNTIME) //runtime에 적용
@MustBeDocumented //코틀린에서 annotaion생성시 필수
annotation class StringFormatDateTime(
val pattern: String = "yyyy-MM-dd HH:mm:ss",
val message: String = "시간 형식이 유효하지 않습니다.",
val groups: Array<KClass<*>> = [],
val payload: Array<KClass<out Payload>> = []
)
2. Validator
import com.example.kotlinspring.annotaion.StringFormatDateTime
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext
class StringFormatDateTimeValidator: ConstraintValidator<StringFormatDateTime, String> {
private var pattern : String? = null
override fun initialize(constraintAnnotation: StringFormatDateTime?) {
this.pattern = constraintAnnotation?.pattern
}
//정상이면 true
override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {
return try {
LocalDateTime.parse(value, DateTimeFormatter.ofPattern(pattern))
true
}catch (e:Exception){
false
}
}
}
3. 적용
data class UserRequest(
@field:NotEmpty
@field:Size(min=2, max=8)
var name: String? = null,
@field:PositiveOrZero
var age: Int? = null,
@field:Email
var email: String? = null,
@field:NotBlank
var address: String? = null,
@field:Pattern(regexp = "^\\d{2,3}-\\d{3,4}-\\d{4}\$") //정규식
var phoneNumber: String? = null, //phone_number: snake case
@field:StringFormatDateTime(pattern = "yyyy-MM-dd HH:mm:ss", message = "패턴일 올바르지 않습니다.")
var createdAt: String? = null //yyyy-MM-dd HH:mm:ss
)
4. 결과
5. GitHub : Bean Validation: custom annotation
'인프런 > [인프런] Kotlin으로 개발하는 Spring Boot Web MVC' 카테고리의 다른 글
예외처리: Exception Handler (0) | 2022.04.25 |
---|---|
예외처리: Controleller Advice (0) | 2022.04.25 |
JSR-380 Bean Validation (0) | 2022.04.24 |
ResponseEntity, @ResponseBody (0) | 2022.04.24 |
DELETE (0) | 2022.04.24 |
Comments