ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 핸들러 메소드 6부: @Validated
    SPRING/스프링 MVC 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;
        }
    
    
    
    
    }
    

     

     

     

     

Designed by Tistory.