-
[Restuful 학습] - Validation 체크 (@Valid 사용)SPRING/WEBSERVICE 2020. 8. 8. 15:42
Restful로 데이터를 받을 때 @Valid 어노테이션을 이용하여 유효성 체크를 할 수 있다.
@PostMapping("/users") public ResponseEntity<User> createUser(@Valid @RequestBody User user) { User savedUser = service.save(user); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) .toUri(); //아래와 같이 HTTP 상태코드를 post get put delete에 맞게 내려주는 것이 무조건 200을 내려주는것보다 좋은코드이다. return ResponseEntity.created(location).build(); }
아래와 같이 @Size, @Past와 같이 Validation 체크를 어노테이션을 걸어서 사용하면 된다.
@Data @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; @Size(min=2, message ="Name은 2글자 이상 입력해 주세요.") private String name; @Past private Date joinDate; }
간략하게 사용하자면 위와 같은 설정으로도 Validation 체크가 가능하지만, ResponseEntityExceptionHandler 쪽에서 Override(재정의)를 사용하여 조금 더 고급스럽게 사용이 가능하다.
package com.example.demo.exception; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @RestController @ControllerAdvice public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler{ @Override protected ResponseEntity<Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Valid Exception", ex.getBindingResult().toString()); return new ResponseEntity(exceptionResponse, HttpStatus.BAD_REQUEST); } }
1자리의 name 데이터를 서버쪽으로 날렸을 때 아래와 같이 @Valid 어노테이션으로 인한 Exception이 발생한다.
'SPRING > WEBSERVICE' 카테고리의 다른 글
[Restuful 학습] - 버전관리 (0) 2020.08.08 [Restuful 학습] - 다국어처리 실습 및 예제 (0) 2020.08.08 [Restuful 학습] - DeleteMapping 실습 및 예제 (0) 2020.08.08 [Restuful 학습] - Exception 핸들링을 통한 HTTP STATUS Code 관리법 (ControllerAdvice 사용) (0) 2020.08.04 [Restuful 학습] - PostMapping 설명 및 예제 (0) 2020.08.03