현상
1. RestTemplate.postForEntity()를 통해 특정 URL(/receive)에 Client로부터 전송받은 값에 따라 DTO의 종류를 다르게 하여 List<Dto> 객체를 전송하도록 로직을 구성
List<CarDto> carDtos = carRepo.findAll();
restTemplate.postForObject(".../api/car/receive", carDtos, Void.class);
2. 컨트롤러에 해당 요청 수령 시(/receive) 데이터를 처리하는 로직을 작성하였는데 이때, 하나의 API에서 DTO의 종류에 따라 처리 방식을 다르게 하기 위하여 @RequestBody의 데이터 타입을 List<?>으로 설정하였더니 해당 에러가 발생
원인
- 해당 에러는 Spring에서 컬렉션의 제네릭 타입을 지정하지 않았을 때 주로 발생
해결 방법
- 요청 수령 시 데이터를 처리하는 API를 하나로 개발하지 않고 DTO 종류별 API로 나눠 개발하여 각 API에서 @RequestBody의 데이터 타입을 List<CarDto>처럼 ?를 사용하지 않고 명확히 정의하여 해결
@RequestMapping("/api/car")
public class CarController {
// Before
@PostMapping("/receive")
public void synchronizeDBReceiveInfoNtApi(@RequestBody List<?> data) throws Exception {
...
}
// After
@PostMapping("/receive/car")
public void synchronizeDBReceiveInfoNtApi(@RequestBody List<CarDto> data) throws Exception {
...
}
@PostMapping("/receive/bus")
public void synchronizeDBReceiveInfoNtApi(@RequestBody List<BusDto> data) throws Exception {
...
}
}
'Spring > TroubleShooting' 카테고리의 다른 글
WebClient OPEN API HTTP GET 호출 문제 (0) | 2024.11.20 |
---|---|
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<java.lang.Object>` from Object value (token `JsonToken.START_OBJECT`) (1) | 2024.04.12 |
@Pathvariable 슬래시(/) 처리 방법 (0) | 2024.03.12 |
Sqlite LocalDateTime 적용 문제 (0) | 2024.02.19 |
SSLHandshakeException: PKIX ~ 인증서 관련 에러 (0) | 2024.02.15 |
댓글