开发者社区 问答 正文

有处理过前台传参自动装配到对象里面后,忽略大小写的情况嘛?

有处理过前台传参自动装配到对象里面后,忽略大小写的情况嘛?

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
初商 2019-08-28 17:31:41 515 分享 版权
阿里云 AI 助理回答

在处理前台传参并自动装配到对象时,如果需要忽略参数的大小写,通常需要自定义一些逻辑来实现这一需求。虽然Spring框架本身并不直接提供参数名大小写不敏感的功能,但你可以通过一些间接的方式来达到目的。

方法一:使用自定义转换器/格式化器

你可以为特定的类型或属性创建自定义的ConverterFormatter,在转换过程中实现忽略大小写的逻辑。例如:

  1. 实现org.springframework.core.convert.converter.Converter接口。
  2. 在配置类中注册你的转换器。
@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);
    }
}

方法二:自定义HandlerMethodArgumentResolver

如果你是通过@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的工作原理有一定的了解,并且可能需要根据实际应用场景调整。此外,这种方式可能会增加代码的复杂度,因此在决定采用之前,请权衡利弊。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: