SPRING/스프링 MVC

핸들러 메소드 6부: @Validated

JUMP개발자 2021. 7. 3. 18:09

@Valid 관련 API DEPENDENCY

 <dependency>
 	<groupId>org.springframework.boot</groupId>
 	<artifactId>spring-boot-starter-validation</artifactId>
 </dependency>
 <dependency>
 	<groupId>javax.validation</groupId>
 	<artifactId>validation-api</artifactId>
 </dependency>

 

@Validated :

스프링 MVC 핸들러 메소드 아규먼트에 사용할 수 있으며, validation group이라는 힌트를 사용할 수 있다.

@Valid 애노테이션에는 그룹을 지정할 방법이 없다. 

@Validated는 스프링이 제공하는 애노테이션으로 그룹 클래스를 설정할 수 있다.

 

아래와 같이 변수에 Validation 그룹을 설정할 수 있다.

public class Event {

    interface ValidateLimit {};
    interface ValidateName {};

    private int id;

    @NotNull(groups = ValidateName.class)
    private String name;

    @Min(value = 30, groups = ValidateLimit.class)
    private Integer limit;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }
}

아래와 같이 이름에 대해서만 Validation 체크를 할 수 있다.

@Controller
public class SampleController {

    // 이름에 대해서만 Validation 체크를 함
    @PostMapping("/events/valid")
    @ResponseBody
    public Event getEvent(@ModelAttribute @Validated(Event.ValidateName.class) Event event,
                          BindingResult bindingResult) {

        if(bindingResult.hasErrors()) {
            System.out.println("=======================");
            bindingResult.getAllErrors().forEach(c->{
                System.out.println(c.toString());
            });
        }

        return  event;
    }




}