.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 에러
HTTP (HyperText Transfer Protocol) 406 Not Acceptable 클라이언트 오류 응답 코드는 서버가 요청의 사전 콘텐츠 협상 헤더에 정의 된 허용 가능한 값 목록과 일치하는 응답을 생성 할 수 없으며 서버가 기본 표현을 제공하지 않음을 나타낸다고 한다.
즉 헤더랑 일치하는 값이 없다는 건데...
에러 내용 찾아봤는데 다들 MappingJackson2HttpMessageConverter 문제라고 한다..
헤더에 원하는 타입으로 변환 못해주고 있는 상황
다른 블로그에서는 거의다 Lombok을 사용하고 있기때문에 @Getter 라는 어노테이션을 Dto 클래스 위에 선언해주면 된다고 하는데... 나의 경우는 이런 경우랑 상관이 없다..(테스트 코드이고 이걸로 해결안된던 적이 거의 없어서...) 그렇지만 링크를 보니 지난번에도 이 에러코드를 검색한 흔적이 있길래 한 번 정리를 하고 가자.
컨트롤러
@GetMapping("/freeTalks")
@ResponseStatus(HttpStatus.OK)
public FreeTalksDto list(
@RequestParam(required = false, defaultValue = "1") Integer page
) {
List<FreeTalkDto> freeTalkDtos =
freeTalkService.list(page)
.stream()
.map(freeTalk -> freeTalk.toDto(freeTalkHashTagService.list(freeTalk.getId())))
.collect(Collectors.toList());
int pageNumber = freeTalkService.pages();
return new FreeTalksDto(freeTalkDtos, pageNumber);
}
컨트롤러에서 다음과 같이 보내주고 있다.
하나하나 검사를 해보니...
마지막에 리턴해주는 DTO를 생성만 해두고 게터와 필드를 아무것도 안만들어놨었다... 어쩐지...
또 받아오는 변수를 아래와 같이 하지 않고 freeTalksDto로 getter를 만드니 jsontype이 api 서버에서 dto라는 이름을 가지고 나와서 프론트 엔드에서 받아오기 적절하지 않다.. 게터 명 맞추는 것도 중요하다!!!!!
노션에 기록해두자
public class FreeTalksDto {
private List<FreeTalkDto> freeTalks;
private int pageNumber;
public FreeTalksDto(List<FreeTalkDto> freeTalks, int pageNumber) {
this.freeTalks = freeTalks;
this.pageNumber = pageNumber;
}
'개발 관련 학습 및 문제해결' 카테고리의 다른 글
리액트에서 CK에디터 구현하기2 (리액트 html 태그 사용 법 dangerouslySetInnerHTML) [20221106-TIL] (0) | 2022.11.06 |
---|---|
리액트에서 CK에디터 구현하기 1.[20221105 TIL] (0) | 2022.11.05 |
Jpa repository save 는 왜 null 일까? 1[20221103 TIL] (0) | 2022.11.03 |
ManyToOne, OneToMany 를 쓰지않고 DTO에 List 속성 넣어주기[20221102 TIL] (0) | 2022.11.02 |
자바 DTO의 속성값에 배열넣어주기[20221101-TIL] (0) | 2022.11.01 |
댓글