【问题标题】:@JsonProperty not working (Weblogic 12.2.1 and Java 8)@JsonProperty 不工作(Weblogic 12.2.1 和 Java 8)
【发布时间】: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


【解决方案1】:

@Codo 说检查你的导入,当我的项目中很少从 Jaxson 阅读器/编写器的不同供应商导入混合库时,我曾经遇到过同样的问题 检查一下,我相信你会找到你的错误。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      好吧,显然在过去的某个时候,Jackson 可能支持一个名称用于序列化,而另一个名称用于反序列化。现在好像没有了。当我使用 @JsonProperty("value") 注释 getter (getVal() ) 时,它期望传入的 json 有效负载也具有“value”(而不是“val”),即使我有一个 setVal() 方法。

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        • 2018-12-04
        • 2018-04-26
        • 1970-01-01
        相关资源
        最近更新 更多