gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:00 25 4
gpt4 key购买 nike

我有一个嵌套的 json pojo,其中 json 的嵌套部分用 @JsonRawValue 标记。我正在尝试将其与休息模板进行映射,但出现错误JSON 解析错误:无法从 START_OBJECT token 中反序列化 java.lang.String 的实例;

嵌套异常是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。这对于 postman、swagger 来说效果很好,我在响应中看到了 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 格式。这是一种指示字符串字段按原样发送的方法。换句话说,目的是告诉 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();
}
}

关于java - 将嵌套 json 映射到具有原始 json 值的 pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54469208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com