Validation
- Internationalization
- XML format으로 반환하기
유효성 체크를 위한 Validation API
- JDK에 포함된 API
- hibernate 라이브러리에 포함됨
- 자바에서 데이터베이스에 관련된 것을 사용하기 위한 API
- 자바환경에서의객체-관계모델매핑솔루션
의존성 추가
//Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
//gradle
implementation 'org.springframework.boot:spring-boot-starter-validation'
Validation 사용 어노테이션
@Size : 값이 min과 max사이에 해당하는가
@NotNull : 해당 값에 Null을 허용 X
@NotBlank : Null을 허용 X, 문자가 한 개 이상 포함
@NotEmpty : Null을 허용 X, 공백 문자열을 허용X
@AssertTrue : true인지 확인
@Min : 값이 Min보다 작은가
@Max : 값이 Max보다 큰가
사용 예제
@Size와, @Past를 사용해 유효성 체크를 해보자
@Data //getter,setter 사용
@AllArgsConstructor
public class User {
private Integer id;
@Size(min=2) //최소 길이 2개 이상
private String name;
@Past //미래 데이터를 쓸수가 없다는 제약조건
private Date joinDate;
}
- 도메인 객체에 @Size(min=2) //최소 길이, @Past 제약조건 추가 했다.
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user){
User savedUser = service.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}") //반환 값은 가변 변수 id
.buildAndExpand(savedUser.getId()) //저장된 user값의 id값을 지정
.toUri(); //URI로 반환
return ResponseEntity.created(location).build();//서버로 부터 적절한 상태 코드를 보내주는 것이 좋은 api 임
}
사용하려고 하는 클래스와 객체 앞에 @valid 추가 한다. 해당 클래스가 실행 되면 받으면 @valid가 실행돼 유효성 검사한다.
- name 객체의 @Size(min=2) //최소 길이 제약 조건 실행 된 것이 확인 된다.
유효성 메시지 추가
400 에러 시 Body에 적절한 에러 메시지를 호출하게 만들어보자
ResponseEntityExceptionHandler의 handleMethodArgumentNotValid메서드를 재정의 해보자.
>> Exception Handling 예제
https://kwonyeeun.tistory.com/64?category=1042119
ExceptionHandler에서 ResponseEntityExceptionHandler의 handleMethodArgumentNotValid를 재정의한다.
@Override //메서드를 재정의하겠다!
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(),ex.getMessage(),ex.getBindingResult().toString());
return new ResponseEntity(exceptionResponse,HttpStatus.BAD_REQUEST);
}
message를 추가해서 전달한다.
@Data //getter,setter 사용
@AllArgsConstructor
public class User {
private Integer id;
@Size(min=2,message="Name은 두가지 이상 전달해 주세요") //최소 길이 2개 이상
private String name;
@Past //미래 데이터를 쓸수가 없다는 제약조건
private Date joinDate;
}
Reference
인프런 강의 - Spring Boot를 이용한 RESTful Web Services 개발
'공부 > Spring Boot를 이용한 RESTful Web Services 정리' 카테고리의 다른 글
[Spring Boot] Response 필드 제어하기 (Filterling) (0) | 2021.08.20 |
---|---|
[Spring Boot] DELETE HTTP Method 구현 (0) | 2021.08.19 |
[Spring Boot] HTTP Status Code 제어, Exception Handling (0) | 2021.08.06 |
[Spring Boot] API 구현- Domain , GET , POST 예제 (0) | 2021.08.04 |
[Spring Boot] DispatcherServlet 작동 원리, @PathVariable 사용법 (0) | 2021.08.03 |