【问题标题】:Ignore JSON attribute cases declared with @JsonProperty with Spring RestTemplate使用 Spring RestTemplate 忽略使用 @JsonProperty 声明的 JSON 属性案例
【发布时间】:2019-08-01 10:24:08
【问题描述】:

我使用 @JsonProperty 通过 Spring RestTemplateexchange 序列化来自 JSON 的数据。

@JsonProperty("ip_address")
public String ipAddress;

@JsonProperty("port")
public Integer port;

我需要这个属性来识别属性名称的大写和小写版本,即@JsonProperty中设置的“ip_address”和“IP_ADDRESS”应该被识别。

我尝试了以下方法,但都没有成功:

这三个都只有null 各自属性的值,因为我在模板的未知属性(也就是不同的字母大小写)上禁用了错误。

【问题讨论】:

  • 您在尝试这些解决方案时是否遇到错误?
  • @AndrianekenaMoise 我更新了问题,但他们只有null 值,即当我期望“ip_address”但“IP_ADDRESS”在 JSON 中时。

标签: java json spring serialization resttemplate


【解决方案1】:

您可以告诉杰克逊将您所有的属性名称转换为例如SNAKE_CASE 变体并相应地设置您的@JsonProperty

例子:

在spring boot中设置application.properties中的属性

spring.jackson.property-naming-strategy=SNAKE_CASE

或者您可以仅为您的单个班级启用它并使用以下内容注释班级:

@JsonNaming(PropertyNamingStrategy.SNAKE_CASE.class)

然后设置@JsonProperty:

@JsonProperty(vale="ip_address")

【讨论】:

    【解决方案2】:

    我能够在不更改我原来的 pojo 类 @JsonProperty 配置的情况下完成这项工作。使用您链接到的 Object Mapper 和 Rest Template 示例,但使用不区分大小写的映射器功能而不是属性命名策略

    ObjectMapper 映射器 = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

    【讨论】:

    • 您好,我正在努力解决这个问题。您在应用程序启动时的哪个位置创建了 ObjectMapper?我在静态部分中添加了,但它从未被调用。谢谢!
    【解决方案3】:

    Kishore Diyyana:

    让 Spring Boot 应用程序忽略 JSON 属性名称的大小写:

    第 1 步:确保您的 POJO/Domain/Model 类具有具有各自参数的构造函数,删除任何零参数构造函数。 第 2 步:添加 Jackson 库作为依赖项 例如:

    <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-jaxb-annotations</artifactId>
                <version>2.6.5</version>
            </dependency> 
    

    第 3 步:在 application.properties 文件中启用,如下所示 spring.jackson.mapper.accept_case_insensitive_properties=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 2011-08-20
      • 1970-01-01
      相关资源
      最近更新 更多