Springboot 定义接口方法同时支持GET和POST请求

189人浏览

@RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

常用方式如下写法:

@RequestMapping(method = RequestMethod.GET)
String get() {
	return "from get";
}
@RequestMapping(method = RequestMethod.DELETE)
String delete() {
	return "from delete";
}
@RequestMapping(method = RequestMethod.POST)
String post() {
	return "from post";
}
@RequestMapping(method = RequestMethod.PUT)
String put() {
	return "from put";
}

如果接口方法,需要同时支持GET/POST两种请求方式,怎么办呢? 如下写法可以解决:

@RequestMapping(value = "/test", method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public String test(HttpServletRequest request) {

	//遍历请求参数
	Set<Map.Entry<String, String>> set = showParams(request).entrySet();
	for (Map.Entry<String,String> entry : set) {
		if (!entry.getKey().toString().equals("submit")) {
			log.info("param:{}={}", entry.getKey().toString(), entry.getValue().toString());
		}
	}
	
	return "ok";
}

private Map showParams(HttpServletRequest request) {
	Map map = new HashMap();
	Enumeration paramNames = request.getParameterNames();
	while (paramNames.hasMoreElements()) {
		String paramName = (String) paramNames.nextElement();
		String[] paramValues = request.getParameterValues(paramName);
		if (paramValues.length == 1) {
			String paramValue = paramValues[0];
			if (paramValue.length() != 0) {
				map.put(paramName, paramValue);
			}
		}
	}
	
	return map;
}

关键是这一行:@RequestMapping(value = "/test", method = {RequestMethod.GET,RequestMethod.POST})