Spring에서 API 호출 이후 응답에 대해 ObjectMapper를 이용하여 HttpEntity<String>의 body를 특정 Class에 값을 매핑시켜 사용 하고 있다.
// 기존 응답 예시
{
"id": "1201204567",
"model": "gpt-35-turbo",
"choies": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistanct",
"content": "반가워요."
}
}
]
}
// 기존 Class 예시
public class GptResponse {
private String id;
private String model;
private List<Choice> choies;
}
하지만 API 응답 결과에 새로운 field가 추가되는 경우, 매핑 Class에 해당 field 값이 없다면 Unrecognized field "{field_nm}"와 같은 오류가 발생하게 된다.
// 변경된 응답 예시
{
"id": "1201204567",
"model": "gpt-35-turbo",
"choies": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistanct",
"content": "반가워요."
}
}
],
"promt_filter_results": ...
}
이 때 해당 field 값이 불필요하다 혹은 추후 신규 field 추가로 오류 발생을 예방하고자 한다면 해당 코드를 수정해야 한다.
첫 번째로 @JsonIgnoreProperties(ignoreUnknown = true)를 이용할 수 있다.
매핑되는 클래스의 상단에 @JsonIgnoreProperties(ignoreUnknown = true)를 적용하면 이후 신규 추가 field에 대해 무시하고 지나가게된다.
그러나 해당 depth에만 적용되며 하위 depth에도 신규건이 추가된 경우 동일하게 오류가 발생하므로 하위 매핑 Class에도 적용하여야 한다.
// Ignore가 적용된 Class 예시
@JsonIgnoreProperties(ignoreUnknown = true)
public class GptResponse {
private String id;
private String model;
// Choice 클래스에 매핑되는 부분에도 신규 field 추가된 경우 동일한 오류가 발생함
private List<Choice> choies;
}
두 번째 방법은 ObjectMapper 객체 생성시 DeserializationFeature 옵션을 사용하여 오류를 해결 할 수 있다.
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.readValue(response.getBody(), GptResponse.class);
반응형
'IT > Spring' 카테고리의 다른 글
[Spring][Error] java.lang.IllegalStateException: Module entity with name: ... (0) | 2024.04.19 |
---|---|
[Spring] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (2) (0) | 2024.04.09 |
[Spring] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (1) (0) | 2023.07.26 |
[Spring][Error] Java PKIX path building failed: (0) | 2023.06.16 |
[Spring] 스프링 핵심 원리 - 기본편 (9) (0) | 2023.04.02 |
댓글