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

Spring Boot中能否通过JSON属性映射GET请求参数至实体字段?

问题分析与解决办法

核心问题:你使用的@JsonProperty是Jackson框架用于处理JSON请求体序列化/反序列化的注解,而GET请求的查询参数属于URL表单参数范畴,Spring MVC处理这类参数绑定到实体类时,不会识别@JsonProperty,导致xqId字段始终为null。

以下是三种可行的解决方式:

1. 用Spring原生@RequestParam指定参数映射

直接在实体类的xqId字段上添加@RequestParam注解,明确指定要绑定的URL参数名:

@Data
@Accessors(chain = true)
public class BaCyxxReq extends PageReq {
    
    private String keyword;
    
    @NotBlank(message = "xq_id can not be null")
    @RequestParam("xq_id")
    private String xqId;
}

接口依旧使用@ModelAttribute即可正常绑定参数。

2. 配合@SpringQueryMap使用Jackson蛇形命名策略

在实体类上添加@JsonNaming注解,开启蛇形命名(下划线转驼峰)的自动映射,再搭配@SpringQueryMap使用:

@Data
@Accessors(chain = true)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class BaCyxxReq extends PageReq {
    
    private String keyword;
    
    @NotBlank(message = "xq_id can not be null")
    private String xqId;
}

接口代码保持:

@GetMapping("/hqcyxx")
PageResult<List<QlrDTO>> getAreaMembers(@Valid @SpringQueryMap BaCyxxReq req);

此时@SpringQueryMap会借助Jackson的命名策略,自动将xq_id映射到xqId字段。

3. 配置全局参数绑定的驼峰转下划线规则

如果需要所有实体类都支持下划线参数转驼峰字段的自动映射,可以编写WebMvc配置类自定义转换规则:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToCamelCaseConverter());
    }

    static class StringToCamelCaseConverter implements Converter<String, String> {
        @Override
        public String convert(String source) {
            if (source == null || source.isBlank()) {
                return source;
            }
            StringBuilder sb = new StringBuilder();
            boolean needUpper = false;
            for (char c : source.toCharArray()) {
                if (c == '_') {
                    needUpper = true;
                } else {
                    sb.append(needUpper ? Character.toUpperCase(c) : c);
                    needUpper = false;
                }
            }
            return sb.toString();
        }
    }
}

配置完成后,无论使用@ModelAttribute还是@SpringQueryMap,URL中的xq_id都会自动映射到实体类的xqId字段。

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:51:00