【发布时间】:2016-10-21 05:32:54
【问题描述】:
我遇到了一个问题,即用于更改变量名称的 JsonProperty 注释未得到遵守。这是示例应用程序 https://github.com/derrylvarghese/problematicjson
我正在将以下 JSON 转换为 POJO,然后将其转换回 JSON
String json = "{\"response\": {\"companyname\": \"ABC Company\",\"issn\": [{\"format\": \"paper\",\"val\": \"0018-9480\"},{\"format\": \"online\",\"val\": \"1557-9670\"}]},\"teststring\":\"testing me out\"}";
ObjectMapper mapper = new ObjectMapper();
WrapperObj record = mapper.readValue(json, WrapperObj.class);
ObjectWriter writer = mapper.writer();
writer.writeValue(response.getOutputStream(), record);
我希望 'issn' 对象中的 'val' 显示为 'value',因为我在 'val' 字段上应用了 @JsonProperty("value")。 这是输出 json(为简洁起见进行了编辑)。
issn: [
{
format: "Print ISSN",
val: "0018-9480"
}
]
如果我要创建 Issn 对象并执行 record.getResponse.setIssn(setMyObject),则 json 输出会显示正确的 JsonProperty 标记。我正在链接到一个示例项目,如果有人感兴趣,它将显示这一点。 (git链接:https://github.com/derrylvarghese/problematicjson)
更新
好像因为我用@JsonProperty("value") 注释了我的 POJO 字段,所以传入的 JSON 字段也应该称为“值”。所有这一切,我在输出中看到“val”,因为我有一个所有字段都进入的全部列表字段。我删除了那个 JsonAnyGetter 字段,现在我的 'val' 字段没有显示出来。
【问题讨论】:
-
我进行了一个快速的单元测试,输出与预期一致,
val写为value。你有序列化的代码示例吗?作为旁注,您不需要注释 getter 和字段。 -
作为@Leon,我无法复制。
-
您可能导入了错误的
JsonProperty注释类,或者您可能使用了错误的 JSON 序列化程序,即不关心JsonProperty注释的序列化程序。提供更多代码,特别是Isbn类的导入和 JSON 序列化器的配置。 -
@codo 这段代码曾经在 Java 1.6 和 Weblogic 10 环境中运行良好。现在我正在尝试将相同的代码迁移到 Java 8 和 Weblogic 12。Jackson 导入是 import
com.fasterxml.jackson.annotation.JsonProperty;我将在一个单独的 java 项目中尝试一个单元测试用例,但我相信它会正常工作。将其转换为 JSON 的代码类似于ObjectMapper objectMapper = new ObjectMapper(); ObjectWriter objectWriter = objectMapper.writerWithView(HtmlView.class); objectWriter.writeValueAsString(record) -
能否附上HtmlView的源码?
标签: java json spring weblogic12c