HttpMediaTypeNotAcceptableException 예외 코드 수정

이수찬·2023년 4월 6일
0
  1. 예외 메세지
    Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]

  1. 예외가 발생한 소스 코드
  • ItemController
    @GetMapping(ApiPath.ITEM)
    public ResponseEntity<?> findItemDetails(@RequestParam Long itemId) {

        FindItemDetailsRs response = findItemService.findItemDetails(itemId);
        return ResponseEntity.ok(response);
    }
  • ItemService
    public FindItemDetailsRs findItemDetails(Long itemId) {

        Item findItem = itemRepository.findById(itemId).orElseThrow(CannotFindItemException::new);
        return Item.toFindItemDetailsRs(findItem);
    }
  • FindItemDetailsRs
@Builder
public class FindItemDetailsRs {

    private Long itemId;
    private String categoryName;
    private String name;

    private int price;
    private String description;
    private String image;
    private String author;
    private String isbn;
    private int ram;
    private String cpu;
    private int ssd;
    private String origin;

}

상품의 상세 정보를 조회하는 과정에서 위와 같은 예외가 터졌다.

  1. 원인과 해결

핸들러가 클라이언트에서 요청한 JsonType으로 응답을 줄 수 없어 예외가 발생했다.
spring은 jackson라이브러리를 사용해 json데이터를 직렬화하는 작업을 진행한다.
이때 spring이 dto를 json데이터로 변환하기 위해 데이터를 호출해야 하므로, 이를 위해 getter가 필요하다.

다음과 같이 DTO에 @Getter를 추가해 문제를 해결했다.

@Builder
@Getter
public class FindItemDetailsRs {

    private Long itemId;
    private String categoryName;
    private String name;

    private int price;
    private String description;
    private String image;
    private String author;
    private String isbn;
    private int ram;
    private String cpu;
    private int ssd;
    private String origin;

}

0개의 댓글