程序员的知识教程库

网站首页 > 教程分享 正文

HttpServletRequest使用装饰器模式写body到param

henian88 2024-09-02 16:25:05 教程分享 2 ℃ 0 评论

有时候我们的接口请求方式为x-www-form-unlencoded,如果请求方把参数写入body,我们往往会取不到,此时需要自定义HttpServletRequest将body写入param.

1.读取body

String data = IOUtils.toString(request.getInputStream(), "utf-8");

2.自定义request

public class CustomHttpRequest extends HttpServletRequestWrapper{
//持有原request
	private HttpServletRequest request;
	
	private Map<String, String[]> customParameterMap;
	
	public CustomHttpRequest(HttpServletRequest request) {
		super(request);
		this.request = request;
	}
	
	@Override
    public String getParameter(final String name)
    {
        String[] strings = getParameterMap().get(name);
        if (strings != null)
        {
            return strings[0];
        }
        return super.getParameter(name);
    }
	
//自定义paramMap值
	@Override
	public Map<String, String[]> getParameterMap(){
		Map<String, String[]> parameterMap = new TreeMap<String, String[]>();
		parameterMap.putAll(request.getParameterMap());
		parameterMap.putAll(customParameterMap);
		return parameterMap;
	}
	
	@Override
    public Enumeration<String> getParameterNames()
    {
        return Collections.enumeration(getParameterMap().keySet());
    }

    @Override
    public String[] getParameterValues(final String name)
    {
        return getParameterMap().get(name);
    }

	public Map<String, String[]> getCustomParameterMap() {
		return customParameterMap;
	}

	public void setCustomParameterMap(Map<String, String[]> customParameterMap) {
		this.customParameterMap = customParameterMap;
	}

}

此处也可以重写其他方法,实现自定义返回值。

3.实例化request并设置param

CustomHttpRequest customHttpRequest = new CustomHttpRequest((HttpServletRequest) request);
        customHttpRequest.setCustomParameterMap(additionalParams);

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表