Spring
-
[김영한 스프링] 30. 검증2 Bean Validation - HTTP 메시지 컨버터Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 23:53
Bean Validation - HTTP 메시지 컨버터 @Valid, @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다. 참고 @ModelAttribute는 HTTP 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용한다. @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용한다. ValidationItemApiController 생성 package hello.itemservice.web.validation; import hello.itemservice.web.validation.form.ItemSaveForm; import lombok.extern.slf4j...
-
[김영한 스프링] 29. 검증2 Bean Validation - Form 전송 객체 분리 프로젝트 준비 V4 & 소개 & 개발Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 23:18
Form 전송 객체 분리 - 프로젝트 준비 V4 ValidationItemControllerV4 컨트롤러 생성 ValidationItemControllerV3를 ValidationItemControllerV4로 복붙 validation/v3를 validation/v4로 모두 변경 템플릿 파일 복사 v3를 v4로 복붙 v4폴더를 선택하고 Ctrl + Shift + R을 눌러 하위 파일의 validation/v3를 validation/v4로 모두 변경 실행 Form 전송 객체 분리 - 소개 ValidationItemV4Controller 실무에서는 groups를 잘 사용하지 않는데, 그 이유가 다른 곳에 있다. 바로 등록 시 폼에서 전달하는 데이터가 Item 도메인 객체와 딱 맞지 않기 때문이다. 소위 "H..
-
[김영한 스프링] 28. 검증2 Bean Validation - 수정에 적용 & 한계 & groupsSpring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 22:05
Bean Validation - 수정에 적용 ValidationItemControllerV3 - edit() 변경 @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) { // 특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("t..
-
[김영한 스프링] 27. 검증2 Bean Validation - 스프링 적용 & 에러 코드 & 오브젝트 오류Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 6. 01:27
Bean Validation - 스프링 적용 ValidationItemControllerV3 코드 수정 package hello.itemservice.web.validation; import hello.itemservice.domain.item.Item; import hello.itemservice.domain.item.ItemRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Bind..
-
[김영한 스프링] 26. 검증2 Bean Validation - 소개 & 시작 & 프로젝트 준비 V3Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 5. 21:30
Bean Validation - 소개 검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 다음 코드를 보자. 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; //... } 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화한 것이 바로 Bean Validation이다. Bean..
-
[김영한 스프링] 25. 검증1 Validation - Validator 분리1, 2Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 2. 02:13
Validator 분리1 목표 복잡한 검증 로직을 별도로 분리하자. 컨트롤러에서 검증 로직이 차지하는 부분은 매우 크다. 이런 경우 별도의 클래스로 역할을 분리하는 것이 좋다. 그리고 이렇게 분리한 검증 로직을 재사용할 수도 있다. ItemValidator main/java/hello/itemservice/web/validation/ItemValidator 생성 package hello.itemservice.web.validation; import hello.itemservice.domain.item.Item; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.spri..
-
[김영한 스프링] 24. 검증1 Validation - 오류 코드와 메시지 처리4, 5, 6Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 1. 23:18
오류 코드와 메시지 처리4 MessageCodesResolverTest test/java/hello/itemservice/validation/MessageCodesResolverTest 생성 messageCodesResolverObject 실행 messageCodesResolverField bindingResult.rejectvalue가 내부에서 codeResolver를 호출함 실행 package hello.itemservice.validation; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.validation.DefaultMessageCodesResolver; im..
-
[김영한 스프링] 23. 검증1 Validation - 오류 코드와 메시지 처리1, 2, 3Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 1. 03:41
오류 코드와 메시지 처리1 FieldError 생성자 FieldError는 두 가지 생성자를 제공한다. public FieldError(String objectName, String field, String defaultMessage); public FieldError(String objectName, String field, @Nullable Object rejectedValue, boolean bindingFailure, @Nullable String[] codes, @Nullable Object[] arguments, @Nullable String defaultMessage) 파라미터 목록 objectName : 오류가 발생한 객체 이름 field : 오류 필드 rejectedValue : 사용자가..