Validation은 유효성이라는 뜻으로,
Entity 객체에 @valid 를 부여함으로써, 예외를 발생 시킬수있다.
import lombok.AllArgsConstructor;
import lombok.Data;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import java.util.Date;
@Data
@AllArgsConstructor
public class User {
private Integer id;
@Size(min=2)
private String name;
private Date joinDate;
}
위에 @Size(min=2) 의 의미는 String name의 크기가 최소2가 넘어야 한다는 것이다.
만약 2가 넘기지 않을시 유효성에 위배된다.
@RestController
@ControllerAdvice // 모든 컨트롤러가 실행시, 이것이 실행됌
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllException(Exception ex, WebRequest request){
ExceptionResponse exceptionResponse =
new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
return new ResponseEntity(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(UserNotFoundException.class)
public final ResponseEntity<Object> handleUserNotFoundException(Exception ex, WebRequest request){
ExceptionResponse exceptionResponse =
new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false));
return new ResponseEntity(exceptionResponse, HttpStatus.NOT_FOUND);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(),"Validation failed",
ex.getBindingResult().toString());
return new ResponseEntity(exceptionResponse,HttpStatus.BAD_REQUEST);
}
}
다음은 개인적으로 만든 예외 클래스이다.
ResponseEntityExceptionHandler에서 ResponseEntitiy를 오버라이드 하였다.
이 메서드를 사용하면, body부분에 내가 보내자고하는 에러 사항을 보낼수있다.
body에 보낼 객체는 바로 ExceptionResponnse 객체이다.
인자값으로 내가보낼 정보를 넣어주겠다.
그리고 최종적으로 ResponseEntit
y를 생성하고 인자값은로 response 객체와, status code를 보낸면
400에러와 함께 내가보낸, date, message, detail이 반환된다.
'RESTful' 카테고리의 다른 글
Rest API version 관리(URI) (0) | 2022.01.16 |
---|---|
@JsonFilter (0) | 2022.01.16 |
@JsonIgnore (jackson) (0) | 2022.01.16 |
Internationalization 다국어처리 (0) | 2022.01.15 |
Client 요청 예외처리하기(Status code) (0) | 2022.01.14 |