kok202
스프링 부트 Request 데이터 validation

2019. 9. 9. 01:33[정리] 기능별 개념 정리/스프링 부트

출처 : https://www.youtube.com/watch?v=Ul-1lfjRCiE

Request 시 데이터를 받는 방법 @Validated 지원 @Valid 지원
@RequestParam O X
@RequestHeader O X
@CookieValue O X
@RequestVariable O X
@ModelAttribute O O
@RequestBody O O
@RequestPart O O

 

 

 

Validated 로 Request 데이터 검증하기

@Validated 로 검증 애노테이션인 @NotEmpty 와 @Min 을 사용하겠다는 선언을 해줘야한다.

@RestController
@Validated
public class MyController {
    @GetMapping("/user")
    public User printUser(@NotEmpty String name, @Min(0) int age) {
        System.out.println(name);
        System.out.println(age);
        return "print!";
    }
    
    @ExcptionHandler
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Map validationExceptionHandler(ConstraintViolationException e){
        List<String> errors = e.getConstarintViolations()
                                .stream()
                                .map(ConstraintViolation::getMessage)
                                .collect(Collectors.toList());
        return Collections.singletonMap("errors", errors);
    }
}

 

 

 

Valid + Validated 로 Request 데이터 검증하기

@RestController
public class MyController {
    @GetMapping("/user")
    public String printUser(@Valid @ModelAttribute UserRequest userRequest) {
        System.out.println(userRequest.getName());
        System.out.println(userRequest.getAge());
        return "print!";
    }
    
    @ExcptionHandler
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Map validationExceptionHandler(ConstraintViolationException e){
        List<String> errors = e.getConstarintViolations()
                                .stream()
                                .map(ConstraintViolation::getMessage)
                                .collect(Collectors.toList());
        return Collections.singletonMap("errors", errors);
    }
}
@Data
public class UserRequest {
    @NotEmptiy
    public String name;
    @Min(0)
    public int age;
}

 

 

 

Valid + Validated 에서 다른 방식의 에러 핸들링

@RestController
public class MyController {
    @GetMapping("/user")
    public ResponseEntity printUser(@Valid @ModelAttribute UserRequest userRequest, BindingResult error) {
        if(error.hasErrors()){
            return ResponseEntity.badRequest().build();
        }
        System.out.println(userRequest.getName());
        System.out.println(userRequest.getAge());
        return ResponseEntity.ok("print!");
    }
}

 

 

 

 

 

'[정리] 기능별 개념 정리 > 스프링 부트' 카테고리의 다른 글

Ehcache  (0) 2019.06.04
필터, 인터셉터, AOP  (0) 2019.05.28
스프링 부트 Cache  (0) 2019.05.27
PSA (추상화 계층)  (0) 2019.05.01
스프링 부트의 Mock  (0) 2019.04.28