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 에서 얻게 되었습니다.
@Getter // lombok을 이용한 getter를 추가해서 해결...
public class BasicResponse {
private String success;
private String msg;
public BasicResponse(String success, String msg){
this.success = success;
this.msg = msg;
}
}
감사합니다 도움받아가요~ㅎㅎ