SpringBoot에서 Custom Response 사용, 406에러

조은지·2023년 8월 16일

메모입니다.

1. BaseResponse 생성 후 API 테스트 했을 때 406 에러가 뜨는 경우

https://velog.io/@gloom/Client-Error-status-406-Error

해결
=> 해당 클래스에 @Getter 어노테이션을 달아둔다

이유
원인 중에는 HTTP응답 헤더 설정, Jackson 라이브러리 설치 등도 있었지만,
스프링에서 객체를 json 타입으로 변경을 해줄 때 내부적으로 get메소드를 사용해서 json 타입에 맞게 값을 넣어주는 것 같다.

그런데 get 메소드를 만들지 않은 채 객체만 띨롱 만들어서 오류가 난 듯하다

2. Custom Response를 만들기

ResponseEntity만을 사용하게 되면 검증 오류 등의 에러 발생 시 어떤 문제가 생겼는지 알려주기가 힘들다.

그래서 생각한 방법
1. ResponseEntity와 에러코드를 보관하는 Enum 타입을 생성해서 관리
=> 예전 프로젝트에서 사용해봤는데, 에러코드 관리가 안돼서 고민. 그리고 이 때는 검증오류가 발생했을 때 HTTP 응답 코드는 200으로 보내놓고 객체 내 코드로 구분하는 방식을 썼었는데 내가 만들었지만 이상하다고 생각했다.
2. ErrorResponse 객체 하나 만들어서 ResponseEntity에 담아준다.

error = new ErrorResponse(~,~);
new ResponseEntity (error, HttpStatus.BAD_REQUEST);

이런 식으로

결론
두 가지가 합쳐진 방식..? 사실 잘 모르겠다.

https://cheese10yun.github.io/spring-guide-exception/

검색을 해봤을 때, 에러 코드를 관리하는 Enum 클래스의 경우 도메인만 잘 지정해주면 깔끔하게 사용할 수 있다고 했다.

@ControllerAdvice를 사용해서 검증 오류를 깔끔하게 처리할 수 있다고 했음.

0개의 댓글