아래와 같은 코드로 json response를 responseType 클래스에 대입하였음
//url로 요청 보내고 T타입 객체 받아옴
//Mono객체가 멀티스레딩에 유리함
public <T> T getCustom(String baseUrl, String path, Object paramForm, Class<T> responseType) {
String url =makeRiotRequestUrl(baseUrl, path, paramForm);
log.info("riot api request = {}",url);
return WebClient.builder().build().get().uri(url)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(responseType)
.block();
}
이 때, 필드명이 다르면 null 또는 기본값이 들어감
-primitive type의 경우 기본값
아래와 같은 경우 json object의 필드값은 metadata, info인데 나는 뒤에 DTO를 붙여놨기 때문에 데이터가 대입되지 않았고, @JsonProperty를 설정하여 해결하였음
@Getter
@Setter
@ToString
public class MatchDTO {
@JsonProperty("info")
private InfoDTO infoDTO;
@JsonProperty("metadata")
private MetadataDTO metadataDTO;
}
아래와 같은 경우 필드명은 같았으나 오타가 있었고(아래 코드에는 수정된 상태) 때문에 데이터가 들어오지 않았다.
@Getter
@Setter
@ToString
public class MetadataDTO {
private String dataVersion;
private String matchId;
private List<String> participants;
}
- 기능 구현시마다 테스트를 하는 방침 덕분에 미리 발견할 수 있었다.
- 인텔리제이 IDE의 오타 체크 덕분에 오타로 인한 미적용 문제를 쉽게 발견할 수 있었다. 쉽게 지나치던 오타 부분도 주의깊게 살펴봐야겠다고 느꼈음.