我有一个嵌套的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);
答案 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();
}
}