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

Spring PathVariable绑定自动转小写,如何提取请求原始值?

如何获取@PathVariable绑定前的原始大小写值

这个问题挺有意思的——其实Spring MVC的@PathVariable默认是会保留URL中传入的原始大小写的,你遇到的自动转小写情况,大概率是项目里的某些配置或者自定义逻辑导致的。下面给你两种解决思路:

方案1:修复全局路径匹配配置(推荐)

这种自动转小写的情况,最常见的原因是项目配置了大小写不敏感的路径匹配器,导致Spring在匹配路径时自动将路径片段转成了小写。你可以通过调整配置恢复默认的大小写敏感行为:

如果使用AntPathMatcher(Spring Boot 2.6之前默认,或手动配置)

在配置类中确保路径匹配器开启大小写敏感(这其实是默认值,但如果之前被修改过,需要重置):

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Bean
    public AntPathMatcher antPathMatcher() {
        AntPathMatcher matcher = new AntPathMatcher();
        matcher.setCaseSensitive(true); // 强制开启大小写敏感
        return matcher;
    }
}

如果使用PathPatternParser(Spring Boot 2.6+默认)

在application.properties或application.yml中添加配置:

spring.mvc.pathmatch.case-sensitive=true

配置生效后,@PathVariable就能直接拿到URL中传入的原始大小写值了。

方案2:直接从HttpServletRequest提取原始路径片段

如果不想修改全局配置,或者只需要在个别接口中获取原始值,可以绕过@PathVariable的绑定逻辑,直接从原始请求URI中截取:

@GetMapping("/company/{name}")
public String getCompanyDetails(HttpServletRequest request, @PathVariable("name") String lowerCaseName) {
    // 获取完整请求URI,例如 "/company/AcmeCorp"
    String requestUri = request.getRequestURI();
    // 截取"/company/"之后的部分,得到原始大小写的name值
    String originalName = requestUri.substring(requestUri.indexOf("/company/") + "/company/".length());
    
    // 现在originalName就是请求中传入的原始值,比如"AcmeCorp"
    return String.format("原始名称: %s, PathVariable绑定后的名称: %s", originalName, lowerCaseName);
}

额外排查点

如果上面的方案都不生效,建议检查项目中是否存在自定义的String类型转换器/格式化器——比如实现了Converter<String, String>或Formatter<String>的类,可能在其中写了自动转小写的逻辑,只需要调整这些自定义逻辑的适用范围或者移除转小写代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:27