[英]Map nested json to a pojo with raw json value
我有一個嵌套的json pojo,其中json的嵌套部分用@JsonRawValue
標記。 我正在嘗試將其與rest模板映射,但出現錯誤JSON分析錯誤: Cannot deserialize instance of java.lang.String out of START_OBJECT token;
嵌套的異常是com.fasterxml.jackson.databind.exc.MismatchedInputException
。
這是我的響應對象的樣子:
import com.fasterxml.jackson.annotation.JsonRawValue;
public class ResponseDTO {
private String Id;
private String text;
@JsonRawValue
private String explanation;
//getters and setters;
}
其中的explanation
是映射到字符串的json。 這對郵遞員,招搖工具工作得很好,我在響應中看到的解釋是json。
但是當我使用Rest Template測試它時:
ResponseEntity<ResponseDTO> resonseEntity = restTemplate.exchange(URI, HttpMethod.POST, requestEntity, ResponseDTO.class);
我看到此異常:
org.springframework.web.client.RestClientException: Error while extracting
response for type [class com.**.ResponseDTO] and content type
[application/json;charset=utf-8]; nested exception is
org.springframework.http.converter.HttpMessageNotReadableException: JSON
parse error: Cannot deserialize instance of java.lang.String out of
START_OBJECT token; nested exception is
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot
deserialize instance of java.lang.String out of START_OBJECT token
at [Source: (PushbackInputStream); line: 1, column: 604] (through
reference chain: com.****.ResponseDTO["explanation"])
傑克遜(Jackson)告訴您不能在字符串內插入對象(在錯誤日志中)。
@JsonRawValue
在將對象序列化為JSON格式期間使用。 這是一種指示String字段按原樣發送的方法。 換句話說,目的是告訴Jackson字符串是有效的JSON,並且應在發送時不進行轉義或引用。
您可以做的是為Jackson提供一個自定義方法來設置字段值。 使用JsonNode
作為參數將迫使Jackson傳遞“原始”值。 從那里可以得到字符串表示形式:
public class ResponseDTO {
private String Id;
private String text;
private String explanation;
//getters and setters;
@JsonProperty("explanation")
private void unpackExplanation(JsonNode explanation) {
this.explanation = explanation.toString();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.