일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AOP
- Spring Boot
- 김영한
- jpa
- 백준
- java
- 그리디
- transaction
- 자바
- Proxy
- Thymeleaf
- QueryDSL
- springdatajpa
- SpringBoot
- 인프런
- db
- Greedy
- 알고리즘
- 스프링 핵심 기능
- Exception
- Android
- kotlin
- 스프링 핵심 원리
- JDBC
- JPQL
- 스프링
- http
- spring
- Servlet
- pointcut
- Today
- Total
목록bean validation (8)
개발자되기 프로젝트
앞선 글과 같이 생성일자의 경우 여기저기서 많이 사용한다. 매 번 만들어서 적용하기는 너무 불편하다. 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, Anno..
1. 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-validation") 2. 파라미터에 적용 Bean Validator를 파라미터에 사용하기 위해서는 class에 @Validated를 적용해야 한다. @RestController @RequestMapping("/api") @Validated //얘를 적용해야 하위에 있는 validation Annotation이 동작함. class DeleteApiController { // 1. path variable // 2. request param @DeleteMapping("/delete-mapping") fun deleteMapping( @RequestParam(value = "na..
1. ItemSaveForm @Data public class ItemSaveForm { @NotBlank private String itemName; @NotNull @Range(min=1000, max=1000000) private Integer price; @NotNull @Max(value = 9999) private Integer quantity; } 2. ItemUpdateForm @Data public class ItemUpdateForm { @NotNull private Long id; @NotBlank private String itemName; @NotNull @Range(min=1000, max=1000000) private Integer price; //수정에서는 수량은 제약 없음...
동일한 Model Object를 등록할 경우, 수정할 경우 validation을 다르게 적용해보자. 1. Validation 분리하는 방법 BeanValidation의 groups 사용 ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 객체 사용(DTO?) 2. Bean Validation Groups BeanValidation Groups기능을 활용하면 검증 기능을 Group으로 나누어 적용이 가능. 3. Bean Validation Groups기능 적용 3.1 저장용 group 생성 interface 생성 public interface SaveCheck { } 3.2 수정용 group 생성 interface 생성 public interface UpdateCheck { }..
1. 상품 정보 수정 시 요구사항 데이터를 등록할 때와 수정할 때는 요구사항이 다를 수 있다. 등록시 기존 요구사항 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수량: 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 수정시 요구사항 등록시에는 quantity 수량을 최대 9999까지 등록할 수 있지만 수정시에는 수량을 무제한으로 변경할 수 있다. 등록시에는 id 에 값이 없어도 되지만, 수정시에는 id 값이 필수이다. 만약 요구사항 만족을 위해 id에 @NutNull을 적용해보자. 수정시에는 문제가 없지만 등록 시에는 문제가 생긴다. 현재 logic은 등록시 id를 입력하지 않는..
Field Error말고 Object Error는 어떻게 처리함??? 1. @ScriptAssert() @Data @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000") public class Item { Message 지정도 가능하다. @Data @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000", message = "10000원 넘게 입력해") public class Item { Message Code ScriptAssert.item ScriptAssert 하지만 @ScriptAssert는 제약이 많고 복잡함..
1. Spring적용을 해보자. 기존에 등록한 ItemValidator를 제거! 어? 그래도 검증기 돌아간다.? 2. Spring MVC는 어떻게 Bean Validation 사용? Spring Boot가 spring-boot-starter-validation 라이브러리를 넣으면 자동으로 Bean Validator를 인지하고 스프링에 통합함. Spring Boot는 자동으로 글로벌 Validator를 등록한다. LocalValidatorFactoryBean 을 글로벌 Validator로 등록 이 Validator는 @NotNull 같은 @Annotation을 보고 검증을 수행 글로벌 Validator가 적용되어 있기 때문에, Validator를 사용하기 위해서는 원하는 target 앞에 @Valid , ..
1. Bean Validation 의존관계 추가 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 추가되는 라이브러리 jakarta.validation-api : Bean Validation 인터페이스 hibernate-validator : 구현체 2. Bean Validation 사용 import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validatio..