spring mvc完美支持restful的put提交方式

spring mvc resuful中,put方法好像支持的不太好,无论用注解还是request.getParameter等方法都获取不到,我在网上找了一段代码,修改了下,可以完美获得参数.

方式1:

233101_i1t9_437751.png

方式2:

233152_5XKf_437751.png

PageData是用request封装的,有兴趣的可以问我要代码。

 

下面看对put的封装:

import java.util.Collections;
import java.util.Enumeration;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class PutRequestWrapper extends HttpServletRequestWrapper {

	// 自定義解析完成後的參數,放入request中的key

	public final static String CUSTOMER_ATTR_KEY = "customer.attribute.parameter";

	private Map<String, String[]> reqParams;

	public PutRequestWrapper(HttpServletRequest request) {
		super(request);
		reqParams = (Map<String, String[]>) request.getAttribute(CUSTOMER_ATTR_KEY);
	}

	public Map getParameterMap() {
		return reqParams;
	}

	public Enumeration getParameterNames() {
		return Collections.enumeration(reqParams.keySet());
	}

	public String[] getParameterValues(String name) {
		return reqParams.get(name);
	}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @author jacky
 *
 *  2016年7月22日
 */
public class PutMethodFilter implements javax.servlet.Filter {

	/**
	 * 
	 * Default constructor.
	 * 
	 */
	public PutMethodFilter() {

	}

	/**
	 * 
	 * @seeFilter#destroy()
	 * 
	 */
	public void destroy() {

	}

	/**
	 * 
	 * @seeFilter#doFilter(ServletRequest,ServletResponse, FilterChain)
	 * 
	 */

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		// PUT請求不能通過request.getparameter()得到參數
		if ("PUT".equalsIgnoreCase(req.getMethod())) {
			// InputStreamReader
			BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));
			String org_req_content;
			StringBuilder content = new StringBuilder();
			while ((org_req_content = in.readLine()) != null) {
				content.append(URLDecoder.decode(org_req_content, "UTF-8"));
				Map<String, String[]> map = parseRequestParameter(content.toString());
				request.setAttribute(PutRequestWrapper.CUSTOMER_ATTR_KEY, map);
				// 包裝成自定義的請求
				request = new PutRequestWrapper(req);
				chain.doFilter(request, response);
			}
		}else {
			chain.doFilter(request, response);
		}
	}

	/**
	 * 
	 * 自定義參數解析
	 * 
	 * 注:此方法暫時沒有考慮具有相同名稱的一組提交值的情況,如需要,請自己更改下面的代碼
	 * 
	 * @paramcontent
	 * 
	 * @return
	 * 
	 */
	public Map<String, String[]> parseRequestParameter(String content) {
		Map<String, String[]> params = new HashMap<String, String[]>();
		if (content == null || "".equals(content.trim())) {
			return params;
		}
		try {
			String[] tmp = content.split("&");
			for (int i = 0; i < tmp.length; i++) {
				String[] keyValue = tmp[i].split("=");
				params.put(keyValue[0], new String[] { keyValue[1] });
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return params;
	}

	public void init(FilterConfig arg0) throws ServletException {

	}
}

web.xml

	<filter>
		<filter-name>putMethodFilter</filter-name>
		<filter-class>com.xxx.filter.PutMethodFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>putMethodFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

转载于:https://my.oschina.net/u/437751/blog/716513

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值