일단 시작.

[TIL] DefaultHandlerException 예외발생(추가공부 필요) 본문

STUDY/SpringBoot

[TIL] DefaultHandlerException 예외발생(추가공부 필요)

꾸양! 2023. 7. 11. 20:45

이슈

GET요청을 받아올 때, 다음과 같은 예외 발생

2023-07-14T04:34:09.773+09:00  WARN 11788 --- [nio-8080-exec-3]
.w.s.m.s.DefaultHandlerExceptionResolver
: Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException
: No acceptable representation]

컨트롤러 단의 코드

@GetMapping("/view/all")
public ResponseEntity<PostsResponseDto> getPosts() {
    PostsResponseDto result = postService.getPosts();
    return ResponseEntity.ok().body(result);
}

ResponseEntity에 담아주는 PostsResponseDto 클래스

public class PostsResponseDto {
    private List<PostResponseDto> postsList;
    public PostsResponseDto(List<PostResponseDto> postList) {
        this.postsList = postList;
    }
}

해결

객체 안에 List를 담아서 그 객체를 APIResponseDto의 body에 담아서 보내는 것이 안되는 건가 싶어서 ResponseDto에 대해 구글링을 해보니 body에 List나 Map을 담아도 전혀 문제가 없는 것 같았다. 오 List는 알고 있었는데 Map이라니 새로운 걸 알게 되었다. 여튼, 혹시 객체 안에 List를 담아서 보낸게 문젠가? 싶어서 객체에서 꺼내서 보내보았다. 다음은 수정한 코드이다.

@GetMapping("/view/all")
public ResponseEntity<List<PostResponseDto>> getPosts() {
    List<PostResponseDto> results = postService.getPosts();
        return ResponseEntity.ok().body(results);
}

이렇게 고치고 요청을 보내보니 PostResponseDto가 List의 형식으로 잘 왔다. 전 프로젝트에서는 잘 진행이 되었던 거 같은데 왜 이번에는 안됐는지 잘 모르겠다.

뭐가 다른지 왜 안 됐는지에 대해 공부하고 추가 기록 필요.