gpt4 book ai didi

java - @RequestHeader Map 映射默认大小写?

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:57 29 4
gpt4 key购买 nike

在 spring 3.2 中,我们在 Controller 中使用了它:

@RequestHeader Map<String, String> headers

问题是标题键的映射可以是任何大小写,所以我们必须重新构建标题映射,强制键为小写。

如果 spring 始终强制在 map 中的标题上使用小写或大写,以便更容易进行标题检查,那就太好了。

研究如何改变这种行为很困难,spring mvc 测试设置也是如此。

我们可以重写 RequestHeaderMapMethodArgumentResolver,但是怎么做呢?

最佳答案

是的,您可以覆盖 RequestHeaderMapMethodArgumentResolver。这是一种方法:

import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.annotation.RequestHeaderMapMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import java.util.Map;

public class FixRequestHeaderMapMethodArgumentResolverConfigurer implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String s) throws BeansException {
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String s) throws BeansException {
if(bean instanceof RequestHeaderMapMethodArgumentResolver) {
return new RequestHeaderMapMethodArgumentResolver() {
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return new CaseInsensitiveMap((Map)super.resolveArgument(parameter, mavContainer, webRequest, binderFactory));
}
};
} else
return bean;
}
}

关于java - @RequestHeader Map<String, String> 映射默认大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345956/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com