SpringBoot Could not find acceptable representation(Error: Request failed with status code 406)

FFTL:)·2021년 5월 19일
0

  • 회원가입에 해당하는 POST 요청을 진행하는 과정에서 406 error가 발생을 하였습니다. 문서에서 나온 해당 error에 대한 설명은 아래와 같았습니다.

HTTP (HyperText Transfer Protocol) 406 Not Acceptable 클라이언트 오류 응답 코드는 서버가 요청의 사전 콘텐츠 협상 헤더에 정의 된 허용 가능한 값 목록과 일치하는 응답을 생성 할 수 없으며 서버가 기본 표현을 제공하지 않음을 나타냅니다.

  • 검색을 해보니 Spring 프로젝트의 경우에는 jackson 라이브러리가 없기 때문인 경우가 많다고 하였습니다. 다만 SpringBoot 프로젝트는 spring-boot-starter-web 에서 기본적으로 jackson 라이브러리가 포함되어 있다고 합니다.

  • 해결 방법 중의 하나로 아래처럼 상단의 맵핑 부분에 produces="application/json; charset=utf-8;"를 추가하는 방법이 있었는데 이렇게 코드를 변경했을 때 500 error가 발생하게 되었습니다. @PostMapping(value = "/saveUser", produces="application/json; charset=utf-8;")

결국 아래의 코드로 성공을 하게 되었는데 이 코드 자체에는 문제가 없었습니다.

    @PostMapping(value = "/saveUser")
    public ResponseEntity<BasicResponse> join(@RequestBody SaveUserDto saveUserDto){
        if (userService.saveUser(saveUserDto)){
            return new ResponseEntity<>(new BasicResponse("success", "회원가입에 성공하였습니다."), HttpStatus.OK);
        }
        return new ResponseEntity<>(new BasicResponse("false", "회원가입에 실패하였습니다."), HttpStatus.OK);
    }

문제는 return 부분인 BasicResponse 부분에 있었는데, BasicResponse class에 Getter가 존재하기 않았기 때문이었습니다. 아래처럼 lombok을 이용한 @Getter를 추가하여 해결되었습니다. 이 Getter를 추가하는 시도에 대한 힌트는 검색 중 아래 stackoverflow 에서 얻게 되었습니다.

https://stackoverflow.com/questions/28466207/could-not-find-acceptable-representation-using-spring-boot-starter-web

@Getter // lombok을 이용한 getter를 추가해서 해결...
public class BasicResponse {

    private String success;
    private String msg;

    public BasicResponse(String success, String msg){
        this.success = success;
        this.msg = msg;
    }
}
profile
생각하는 개발자가 되자!

1개의 댓글

comment-user-thumbnail
2022년 1월 9일

감사합니다 도움받아가요~ㅎㅎ

답글 달기