使用Spring RestTemplate忽略使用@JsonProperty声明的JSON属性案例

时间:2019-03-11 06:21:07

标签: java json spring serialization resttemplate

我使用@JsonProperty通过Spring RestTemplate的{​​{1}}通过JSON序列化数据。

exchange

我需要此属性来识别属性名称的大写和小写形式,即应识别在@JsonProperty("ip_address") public String ipAddress; @JsonProperty("port") public Integer port; 中设置的“ ip_address”和“ IP_ADDRESS”。

我尝试了以下方法,但均无效果:

这三个参数各自的属性都具有@JsonFormat(with=JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)值,因为我禁用了模板的未知属性(也称为大小写不同)的错误。

3 个答案:

答案 0 :(得分:0)

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

示例:

在春季启动时,在application.properties中设置属性

spring.jackson.property-naming-strategy=SNAKE_CASE

或者您可以仅针对单个班级启用它,并使用以下注释班级:

@JsonNaming(PropertyNamingStrategy.SNAKE_CASE.class)

然后设置@JsonProperty:

@JsonProperty(vale="ip_address")

答案 1 :(得分:0)

我能够在不更改原始pojo类@JsonProperty配置的情况下完成此工作。在您链接到的“对象映射器和休息模板”示例中,使用不区分大小写的映射器功能来代替“属性命名”策略

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

答案 2 :(得分:0)

Kishore Diyyana:

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

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

<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