@JsonProperty无法正常工作(Weblogic 12.2.1和Java 8)

时间:2016-10-21 05:32:55

标签: java json spring weblogic12c

我遇到了一个问题,即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);

我期待着' val'在'发布'对象显示为'值'因为我有一个@JsonProperty("值")应用于' val'领域。 这是输出json(为简洁起见而编辑)。

    issn: [
          {
          format: "Print ISSN",
          val: "0018-9480"
          }
          ]

如果我要创建一个Issn对象并执行record.getResponse.setIssn(setMyObject),则json输出会显示正确的JsonProperty标记。我正在链接到一个示例项目,如果有人感兴趣的话会显示这个项目。 (git link:https://github.com/derrylvarghese/problematicjson

更新 似乎因为我用@JsonProperty("value")注释了我的POJO字段,传入的JSON字段也应该被称为' value'。这一切都是在我看到' val'在输出中,因为我有一个捕获所有字段所在的所有List字段。我删除了JsonAnyGetter字段,现在我的' val'字段没有出现。

3 个答案:

答案 0 :(得分:2)

@Codo说检查你的导入,我曾经在我的项目中遇到同样的麻烦,很少从Jaxson读写器的不同提供商那里导入混合库 检查一下,我相信你会发现你的错误。

答案 1 :(得分:0)

确保在项目中添加了jackson-databind依赖项/ jar -

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.0</version>
</dependency>

答案 2 :(得分:0)

好的,显然在过去的某个时候杰克逊可能已经支持一个序列化的名称,另一个用于反序列化。似乎不再是了。当我用@JsonProperty(“value”)注释一个getter(getVal())时,它希望传入的json有效负载也有“value”(而不是“val”),尽管我有一个setVal()方法。