일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring Boot
- jpa
- Greedy
- AOP
- java
- Thymeleaf
- 백준
- db
- Proxy
- 스프링
- 스프링 핵심 원리
- Servlet
- kotlin
- springdatajpa
- pointcut
- JDBC
- transaction
- JPQL
- Exception
- 그리디
- 알고리즘
- QueryDSL
- 김영한
- SpringBoot
- 자바
- 인프런
- http
- 스프링 핵심 기능
- spring
- Android
- Today
- Total
목록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..
@Valid , @Validated 는 HttpMessageConverter ( @RequestBody )에도 적용할 수 있음. 1. @ModelAttribute, @RequestBody @ModelAttribute : HTTP 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용 @RequestBody : HTTP Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용 2. Controller @RestController = @Controller + @ReponseBody @RequestBody : JSON 데이터를 객체로 바꿔줌. @Slf4j @RestController @RequestMapping("/validation/api/items") pu..
실무에서는 groups 잘 사용하지 않음. 왜냐? 등록시 Form에서 전달하는 data와 Item Domain 객체와 맞지 않기 때문임. 실제 회원 등록시 회원 정보외에도 약관 정보 등 Item과 관계 없는 데이터가 넘어옴. 따라서 ITem을 직접 받는 것이 아리나, 별도 객체를 만들어서 전달함. 예를들어 ItemSaveForm을 만들어 @ModelAttribute로 사용. 이를 통해 Controller에서 Form data를 받고, 이후 Controller에서 넘어온 data를 사용해서 Item 생성. 1. Form data전달에 Item Domain객체 사용 HTML Form -> Item -> Controller -> Item -> Repository 장점: 중간에 Item을 만드는 과정이 없어서 ..
검증 기능을 지금처럼 매번 코드로 작성하는 것은 귀찮음... 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적 로직임. ??? : 그러면 @Annotation으로 처리해보자. public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; //... } 1. Bean Validation 먼저 Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR..
1. BindingResult?? 스프링이 제공하는 검증 오류를 보관하는 객체이다. 검증 오류가 발생하면 여기에 보관하면 된다. BindingResult 가 있으면 @ModelAttribute 에 데이터 바인딩 시 오류가 발생해도 컨트롤러가호출된다! @ModelAttribute에 바인딩 시 타입 오류가 발생하면? BindingResult 가 없으면 400 오류가 발생하면서 컨트롤러가 호출되지 않고, 오류 페이지로이동한다. BindingResult 가 있으면 오류 정보( FieldError )를 BindingResult 에 담아서 컨트롤러를 정상 호출한다. Field error in object 'item' on field 'itemName': rejected value [null]; codes []; a..
1. 상품 저장 성공 시나리오 2. 상품 저장 실패 시나리오 이런 저런 이유로 data가 누락되거나 잘못된 data가 넘어오는 경우 검증에 실패해야함. 이렇게 검증에 실패한 경우 고객에게 다시 상품 등록 폼을보여주고, 어떤 값을 잘못 입력했는지 알려줘야함. 검증에 실패할 경우 Model에 data를 담아서 상품등록 폼에 다시 전달함. Thymeleaf는 넘어온 data를 가지고 랜더링을 다시함. 3. 검증로직 추가 : addItem. 검증시 오류가 발생하면 errors 에 담아둔다. 이때 어떤 필드에서 오류가 발생했는지 구분하기 위해 오류가 발생한 필드명을 key 로 사용한다. 이후 뷰에서 이 데이터를 사용해서 오류 메시지를 출력 @PostMapping("/add") public String addIte..
1. 검증 로직 추가 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수량: 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 2.Controller의 역할 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 이런 검증 로직을 잘 개발하는 것이 어쩌면 더 어려울 수 있음 3. Client 검증, Server 검증 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류..
1. memberForm 회원 가입에서 넘어오는 회원 데이터 Entity와 분리 @NotEmpty를 통한 validation가능. empty일 경우 스프링이 error띄움. @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다.") private String name; private String city; private String street; private String zipcode; } 2. MemberController createForm - @GetMapping - 해당 Get method로 해당 url 접근하면 회원가입 화면으로 이동. - 빈 MemberForm들고감. --> validation에 활용. @Con..