@JsonProperty 不工作(Weblogic 12.2.1 和 Java 8)
@JsonProperty not working (Weblogic 12.2.1 and Java 8)
我遇到了一个问题,用于更改变量名称的 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' 因为我在 [=29] 上应用了 @JsonProperty("value") =] 字段。
这是输出 json(为简洁起见进行了编辑)。
issn: [
{
format: "Print ISSN",
val: "0018-9480"
}
]
如果我要创建 Issn 对象并执行 record.getResponse.setIssn(setMyObject),json 输出会显示正确的 JsonProperty 标记。我正在 link 访问一个示例项目,如果有人感兴趣,该项目将显示该项目。 (git link: https://github.com/derrylvarghese/problematicjson)
更新
似乎因为我用 @JsonProperty("value")
注释了我的 POJO 字段,传入的 JSON 字段也应该被称为 'value'。所有这一切都是在我看到 'val' 在输出中的时候,因为我有一个 catch all List 字段,所有字段都将进入该字段。我删除了那个 JsonAnyGetter 字段,现在我的 'val' 字段没有显示。
@Codo 说检查你的导入,我曾经遇到过同样的问题,在我的项目中很少从不同的 Jaxson 提供商导入混合库 reader/writer
检查一下,我相信你会找到你的错误。
确保您在项目中添加了 jackson-databind dependency/jar -
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
好吧,很明显杰克逊在过去的某个时候可能支持一个名称用于序列化,另一个名称用于反序列化。似乎不再是了。当我用 @JsonProperty("value") 注释 getter (getVal() ) 时,它期望传入的 json 有效负载也有 "value"(而不是 "val") 尽管我有一个 setVal() 方法。
我遇到了一个问题,用于更改变量名称的 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' 因为我在 [=29] 上应用了 @JsonProperty("value") =] 字段。 这是输出 json(为简洁起见进行了编辑)。
issn: [
{
format: "Print ISSN",
val: "0018-9480"
}
]
如果我要创建 Issn 对象并执行 record.getResponse.setIssn(setMyObject),json 输出会显示正确的 JsonProperty 标记。我正在 link 访问一个示例项目,如果有人感兴趣,该项目将显示该项目。 (git link: https://github.com/derrylvarghese/problematicjson)
更新
似乎因为我用 @JsonProperty("value")
注释了我的 POJO 字段,传入的 JSON 字段也应该被称为 'value'。所有这一切都是在我看到 'val' 在输出中的时候,因为我有一个 catch all List 字段,所有字段都将进入该字段。我删除了那个 JsonAnyGetter 字段,现在我的 'val' 字段没有显示。
@Codo 说检查你的导入,我曾经遇到过同样的问题,在我的项目中很少从不同的 Jaxson 提供商导入混合库 reader/writer 检查一下,我相信你会找到你的错误。
确保您在项目中添加了 jackson-databind dependency/jar -
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
好吧,很明显杰克逊在过去的某个时候可能支持一个名称用于序列化,另一个名称用于反序列化。似乎不再是了。当我用 @JsonProperty("value") 注释 getter (getVal() ) 时,它期望传入的 json 有效负载也有 "value"(而不是 "val") 尽管我有一个 setVal() 方法。