SPRING/WEBSERVICE
[Restuful 학습] - Validation 체크 (@Valid 사용)
JUMP개발자
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이 발생한다.