@GetMapping(ApiPath.ITEM)
public ResponseEntity<?> findItemDetails(@RequestParam Long itemId) {
FindItemDetailsRs response = findItemService.findItemDetails(itemId);
return ResponseEntity.ok(response);
}
public FindItemDetailsRs findItemDetails(Long itemId) {
Item findItem = itemRepository.findById(itemId).orElseThrow(CannotFindItemException::new);
return Item.toFindItemDetailsRs(findItem);
}
@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;
}
상품의 상세 정보를 조회하는 과정에서 위와 같은 예외가 터졌다.
핸들러가 클라이언트에서 요청한 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;
}