1.spring-mvc.xml 配置
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="com.XXXX.framework.core.ParamResolver"/>
</mvc:argument-resolvers>
<mvc:message-converters>
<ref bean="mappingJacksonHttpMessageConverter" />
<!--只转换字符串-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.ParamResolver.java
public class ParamResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 只对有@AjaxParam注解的参数解析
return parameter.hasParameterAnnotation(AjaxParam.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);
// 调用解析方法
HashMap<String, Object> params = (HashMap<String, Object>)WebUtil.getRequestParameters(servletRequest);
return new AjaxParams(params);
}
}
3.WebUtil.java
public class WebUtil {
public static final String POST_DATA="POST_DATA";
public static Map<String, Object> getRequestParameters(HttpServletRequest request){
String m = request.getMethod();
WebUtil obj = new WebUtil();
if("POST".equalsIgnoreCase(m)){
return obj.getPostParams(request);
} else if("GET".equalsIgnoreCase(m)){
HashMap<String, Object> ret = new HashMap<String, Object>();
Enumeration<String> pNames=request.getParameterNames();
while(pNames.hasMoreElements()){
String name=(String)pNames.nextElement();
String[] vals = request.getParameterValues(name);
if(vals==null || vals.length==0){
continue;
}
try {
MapUtils.safeAddToMap(ret, name, java.net.URLDecoder.decode(vals[0], "utf-8"));
} catch (Exception e) {
MapUtils.safeAddToMap(ret, name, vals[0]);
}
}
return ret;
}
return new HashMap<String, Object>();
}
private Map getPostParams(HttpServletRequest request){
BufferedReader in = null;
try {
StringBuffer strb = new StringBuffer();
request.setCharacterEncoding("utf-8");
in=new BufferedReader(new InputStreamReader(request.getInputStream()));
while (true) {
String line = in.readLine();
if (line == null) {
break;
}
line = java.net.URLDecoder.decode(line,"UTF-8");
strb.append(line);
}
String i = strb.toString();
i = StringUtils.isBlank(i)?"{}":i;
try {
return JsonUtil.toHashMap(i);
} catch (Exception e) {
//非JSON格式返回
HashMap ret=new HashMap();
ret.put(POST_DATA, i);
return ret;
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try{in.close();}catch(Exception e){}
}
}
}
4.总结
spring mvc可以自定义请求返回的参数,然后可以自己解析、添加或者转换参数等等操作。