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

时间:2019-01-31 21:03:30

标签: java json spring rest jackson

我有一个嵌套的json pojo,其中json的嵌套部分用<!DOCTYPE html> <html> <head> <title>Class Tests</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" charset="UTF-8"/> <script src=" jQuery3.2.1.js"></script> <script src=" jQuery_UI.js"></script> </head> <script> 'use strict' function selection(select){ s = select; } $(document).ready(function(){ $("button").click(function(){ alert("boop " + s); }); }); </script> <body> <button onclick=selection('Genius')>Genius</button> <button onclick=selection('System')>Systems</button> <button onclick=selection('Personal')>Personal</button> </body> </html> 标记。我正在尝试使用其余模板进行映射,但出现了错误 JSON解析错误:@JsonRawValue

嵌套异常为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; } 是映射到字符串的json。邮递员,招摇工具可以正常工作,我在响应中看到的解释是json。

但是当我使用Rest Template测试它时:

explanation

我看到此异常:

    ResponseEntity<ResponseDTO> resonseEntity = restTemplate.exchange(URI, HttpMethod.POST, requestEntity, ResponseDTO.class);

1 个答案:

答案 0 :(得分:0)

杰克逊(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();
    }
}