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이 발생한다.