有处理过前台传参自动装配到对象里面后,忽略大小写的情况嘛?
本问题来自阿里云开发者社区的【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的工作原理有一定的了解,并且可能需要根据实际应用场景调整。此外,这种方式可能会增加代码的复杂度,因此在决定采用之前,请权衡利弊。