본문 바로가기
Spring

Spring Boot 2.3.x 에러페이지 BindingException 처리에 대한 ErrorAttibutes 변화

by Gil Granger 2021. 1. 29.

스프링 부트 2.3 버전 부터는 에러처리에 대한 메시지 정책이 변경되었다.

 

 

버전 변화로 인해 디폴트로 더이상 BindingExcption 대해서 발생원인에 대한 많은정보를 담고 있는 정보를 메세지에 담아서 보내지 않는다. 

 

이에 대한 에러메세지에 대한 처리는 

ErrorController -> DefaultErrorAttributes 에서 처리하고 있다.

 

에러처리를 ControllerAdvice, RestControllerAdvice 같은 별도의 에러처리를 사용하지 않는다면

embed tomcat까지 에러처리를 전파하게 되고 ErrorController에서 에러처리를 하게 된다.

 

 

친철하게 설명하고 있지 않지만 예전에 올려둔  아래 글을 참고하면 좋겠다. (개인 기록용으로 작성된 글이었다)

granger.tistory.com/34

 

1) Spring Boot Validation - Annotation 메세지 & Exception 에러 발생시 동작 설명

@Vaild, @NotBlank annotaion을 이용한 Server Validation 사용 예제 응답 에러 메세지 @NotNull 예제:) { "timestamp":"2019-06-25T05:34:07.173+0000", "status":400, "error":"Bad Request", "errors":[ { "co..

granger.tistory.com

 

 

ErrorController -> DefaultErrorAttributes 에서는 

 

위와 같이 ErrorAttibuteOpions 에 BINDING_ERROR가 있다면 메세지 errors 필드안에 binding error에 대한 상제정보를 얻을 수 있다.

이에 대한 메세지정보는 

 

granger.tistory.com/51에서 확인가능하다( Spring Boot 2.1.x  기준)

 

2) Spring Boot Validation - Custom Annotation

Annotation을 만들어서 서버에 요청받았을때 유효성 검증을 하고 원하는 메세지를 줄 수 있도록 해보자. 다음은 Pattern Annocation 을 이용하여 원하는 패턴의 정규식만 검증하도록 만든 Annotation 이다.

granger.tistory.com

 

 

 

그렇다면 ErrorAttibuteOpions 안에 BINDING_ERROR 옵션정보는 언제 set되는 것일까?

 

이것이 바로 server.error.include-binding-errors 에 대한 프로퍼티 에 대한 설정이다. (2.3.x버전 업데이트)

 

application.yml 같은 어플리케이션 프로퍼티에 설정하는등의 방법으로 에러정보를 메세지에 담을 수 있을지 지정하고 있다.

 

이에 대한 코드는 아래를 보면 알 수 있다.

 

 

스프링 부트 2.3.x 버전 이전에는 이에 대한 프로퍼티가 있지 않았고 디폴트로 항상 메세지에 errors를 포함했다.

 

errors안에는 바인딩에러에 대한 상세정보를 담고 있기 때문에 이를 외부 응답에 포함될 경우 보안 위험에 노출때문에 업데이트 되었다.   (스프링 부트 github 이슈제기 : github.com/spring-projects/spring-boot/issues/20505)

 

 

 

댓글