有处理过前台传参自动装配到对象里面后,忽略大小写的情况嘛?
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理前台传参并自动装配到对象时,如果需要忽略参数的大小写,通常需要自定义一些逻辑来实现这一需求。虽然Spring框架本身并不直接提供参数名大小写不敏感的功能,但你可以通过一些间接的方式来达到目的。
你可以为特定的类型或属性创建自定义的Converter或Formatter,在转换过程中实现忽略大小写的逻辑。例如:
org.springframework.core.convert.converter.Converter接口。@Component
public class CustomCaseInsensitiveStringToYourObjectConverter implements Converter<String, YourObject> {
    @Override
    public YourObject convert(String source) {
        // 这里可以将source转换为小写(或大写),然后根据转换后的值去查找或构造YourObject实例
        String lowerCaseSource = source.toLowerCase();
        // 根据lowerCaseSource进行相应的处理...
    }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private CustomCaseInsensitiveStringToYourObjectConverter customConverter;
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(customConverter);
    }
}
如果你是通过@RequestParam、@PathVariable等注解接收参数,并希望在绑定到对象前统一处理大小写,可以考虑自定义一个HandlerMethodArgumentResolver。
@Component
public class CaseInsensitiveRequestParameterResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        // 判断是否是你想要处理的参数类型
        return parameter.getParameterType().equals(YourObject.class);
    }
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        // 获取原始请求参数,全部转为小写(或大写)后,再进行绑定
        Map<String, String[]> parameters = webRequest.getParameterMap();
        Map<String, String[]> caseInsensitiveParams = new HashMap<>();
        for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
            caseInsensitiveParams.put(entry.getKey().toLowerCase(), entry.getValue());
        }
        
        // 使用WebDataBinder进行手动绑定
        WebDataBinder binder = binderFactory.createBinder(webRequest, new YourObject(), "yourObject");
        binder.bind(new MutablePropertyValues(caseInsensitiveParams));
        return binder.getTarget();
    }
}
// 确保自定义的Resolver被注册
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private CaseInsensitiveRequestParameterResolver resolver;
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(resolver);
    }
}
请注意,这些方法需要你对Spring MVC的工作原理有一定的了解,并且可能需要根据实际应用场景调整。此外,这种方式可能会增加代码的复杂度,因此在决定采用之前,请权衡利弊。