본문 바로가기

공부/Spring Boot를 이용한 RESTful Web Services 정리

[Spring Boot] RESTful Service 기능 확장 - 유효성 Validation API(@valid)

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) //최소 길이 제약 조건 실행 된 것이 확인 된다.

 

 

유효성 메시지 추가

ResponseEntityExceptionHandler

 

400 에러 시 Body에 적절한 에러 메시지를 호출하게 만들어보자

ResponseEntityExceptionHandler의 handleMethodArgumentNotValid메서드를 재정의 해보자.

 

 

 

>> Exception Handling 예제

https://kwonyeeun.tistory.com/64?category=1042119 

 

[Spring Boot] HTTP Status Code 제어, Exception Handling

HTTP Status Code 제어 HTTP Status Code를 서버에서 클라이언트 응답할 때, 가공해서 보낼 수 있다. 아래의 코드는 USER를 저장하기 위해 서버에 POST 요청 코드 - 서버에서 자동으로 USER id를 생성 - Client는..

kwonyeeun.tistory.com

 

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 개발

 

300x250