簡體   English   中英

將嵌套的json映射到具有原始json值的pojo

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM