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

Spring中@RequestBody无法识别大写属性名及返回格式问题

解决方案

问题根源

Spring默认使用Jackson处理JSON序列化/反序列化,Jackson默认的命名策略会将JavaBean的getter/setter方法名(如getUSERNAME())转换为驼峰或小写的JSON键名,和你要求的全大写键名不匹配,导致请求无法绑定、响应格式不符合要求。

方法1:给实体类属性添加@JsonProperty注解

直接指定JSON字段与实体类属性的映射关系,不受getter/setter命名影响,是最直接的解决方案。

示例实体类:

import com.fasterxml.jackson.annotation.JsonProperty;

public class BusinessEntity {
    @JsonProperty("USER_ID")
    private String USER_ID;

    @JsonProperty("ORDER_NO")
    private String ORDER_NO;

    // 保持封装性,使用正常的getter/setter(命名不影响映射)
    public String getUSER_ID() {
        return USER_ID;
    }

    public void setUSER_ID(String USER_ID) {
        this.USER_ID = USER_ID;
    }

    public String getORDER_NO() {
        return ORDER_NO;
    }

    public void setORDER_NO(String ORDER_NO) {
        this.ORDER_NO = ORDER_NO;
    }
}
  • 请求时,Postman发送的JSON键(如USER_ID)会直接映射到对应属性
  • 响应时,输出的JSON键也会保持全大写格式

方法2:全局配置Jackson,统一使用原样命名策略

如果项目中有大量全大写属性的实体类,推荐全局配置,避免重复添加注解。

Spring Boot配置方式(两种任选其一)

  1. 配置类方式:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonGlobalConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        // 启用IDENTITY策略:实体类属性名与JSON键名完全一致
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.IDENTITY);
        return mapper;
    }
}
  1. application.yml配置方式:
spring:
  jackson:
    property-naming-strategy: IDENTITY

配置后,实体类无需额外注解,只要属性是全大写,JSON的请求/响应键就会自动保持全大写。

方法3:结合Lombok使用(若项目用Lombok简化代码)

如果用@Data注解生成getter/setter,默认会生成驼峰命名的方法,需要配合@JsonProperty或调整Lombok配置:

方式A:配合@JsonProperty

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class BusinessEntity {
    @JsonProperty("USER_ID")
    private String USER_ID;

    @JsonProperty("ORDER_NO")
    private String ORDER_NO;
}

方式B:配置Lombok生成与属性名一致的getter/setter

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(fluent = true)
public class BusinessEntity {
    private String USER_ID;
    private String ORDER_NO;
}

这种方式生成的getter是USER_ID()、setter是USER_ID(String userId),配合Jackson的IDENTITY策略即可正常映射,但注意这种写法不符合标准JavaBean规范,需根据项目情况选择。


内容的提问来源于stack exchange,提问作者To Nam Truong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:35:17