You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON反序列化大小写不匹配问题:接收大写键名JSON时无法映射到实体类

JSON反序列化大小写不匹配问题:接收大写键名JSON时无法映射到实体类

兄弟,我太懂你踩的这个坑了!咱们先把问题根源理清楚,再给你靠谱的解决方案:

为什么改实体类字段为大写还是不行?

你把code改成CODE、sku改成SKU后,Lombok的@Data注解会按照JavaBean规范生成getter/setter方法:

  • 字段CODE对应的getter是getCODE(),setter是setCODE()
  • 但Jackson默认的反序列化逻辑是:对于JSON里的CODE键,它会尝试匹配名为code的字段,或者符合小驼峰规范的setCode()方法,两者完全不匹配,所以映射失败。

解决方案1:用@JsonProperty精准指定映射关系

这个方法最直接,不用改字段名,只需要在实体类字段上加上@JsonProperty注解,明确绑定JSON里的大写键名即可:

package com.akensys.testlucas.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty; // 记得导入这个包

@Entity
@Data
public class Vetement {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @JsonProperty("CODE")
    private int code;
    
    @JsonProperty("SKU")
    private String sku;
}

这样不管你传的JSON键是小写code还是大写CODE,都能精准映射到实体类的对应字段。


解决方案2:全局配置Jackson忽略大小写

如果有大量实体类需要处理大小写问题,一个个加注解太麻烦,可以全局开启Jackson的大小写忽略功能:

方式1:通过配置文件快速开启

在application.properties里添加一行配置:

spring.jackson.mapper.accept-case-insensitive-properties=true

方式2:自定义ObjectMapper实现更灵活配置

如果需要额外定制Jackson规则,可以写一个配置类:

import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 开启属性大小写忽略
        objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
        return objectMapper;
    }
}

配置完成后,所有JSON的键名大小写都会被自动忽略,不管是code、CODE还是Code,都能正确映射到实体类的code字段。

备注:内容来源于stack exchange,提问作者CosmosFutur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:44:36