관리 메뉴

샐님은 개발중

[Spring Boot] Bean Validation 본문

스프링 MVC 2편 - 인프런 김영한/섹션 4 ,5- 검증1,2 - Validation

[Spring Boot] Bean Validation

샐님 2023. 7. 13. 19:00
728x90
반응형

1. Bean Validation 

검증 기능을 java 파일로 매번 코드로 작성하는 것은 번거롭기때문에 스프링에서 간편하게 사용하도록 표준화 한 것이 Bean Validation 이다. 

Bean Validation은 특정한 구현체가 아니라 검증 애노테이션과 여러 인터페이스의 모음이다. 

일반적으로 사용하는 구현체는 하이버네이트 Validator 이다. 


1. build.gradle 에  implementation 'org.springframework.boot:spring-boot-starter-validation'  라이브 러리 의존관계 추가

 

2. Item.java 에 검증 애노테이션 추가

package hello.itemservice.domain.item;

import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

@Data
    public class Item {

        private Long id;
        @NotBlank
        private String itemName;
        @NotNull
        @Range(min=1000,max=100000)
        private Integer price;
        @Max(9999)
        private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}

controller.java

 @Validated 추가하면 Item.java에 추가한 검증 애노테이션이 실행된다.

@PostMapping("/add")
public String addItem(@Validated @ModelAttribute Item item , BindingResult bindingResult, RedirectAttributes redirectAttributes) {

    //검증에 실패하면 다시 입력 폼으로
    if (bindingResult.hasErrors()) {
        log.info("errors={}",bindingResult);
        return "validation/v3/addForm";
    }
    // 성공 로직
    Item savedItem = itemRepository.save(item);
    redirectAttributes.addAttribute("itemId", savedItem.getId());
    redirectAttributes.addAttribute("status", true);
    return "redirect:/validation/v3/items/{itemId}";
}

화면

스프링 부트는 자동으로 글로벌 Validator 로 등록함

- LocalValidatorFactoryBean 을 글로벌 Validator로등록한다. 이 Validator는 @Notnull 같은 애노테이션을 보고 검증을 수행.  -> @Validated 적용필요.

검증 오류 발생시 FieldError, ObjectError 생성해 BindingResult 에 담아준다. 

 

2. Bean Validation - 에러 코드

NotBlank 라는 오류 코드는

MessageCodesResolver 를 통해 다양한 메시지 코드가 순서대로 생성.

@NotBlank

 

NotBlank.item.itemName

NotBlank.itemName

NotBlank.java.lang.String

NotBlank

 

errors.properties 에 메세지 등록

#Bean Validation 추가
NotBlank={0} 공백X 
Range={0}, {2} ~ {1} 허용
Max={0}, 최대 {1}

화면 실행

 

728x90
반응형