SpringMvc-HandlerMethodArgumentResolver

使用场景:之前我遇见过,前台传递的数据格式是PHP遵循的数据规范,是这个样子的:{“user_name”:“hehe”},因为SpringMVC中只能对驼峰标识(userName)解析,而不能对下划线这种格式解析,所以此处应该自定义参数解析器

1.实体类
public class User1(){
	private String userName;
}
public class User2(){
	private String userName;
}
2.定义Controller
@Controller
public class MyController{
	@RequestMapping("m1")
	public void m1(User1 u1,User2 u2){
		//注意此处是两个参数
		System.out.println(u1.getName());
		System.out.println(u2.getName());
	}
}
自定义HandlerMethodArgumentResolver
public class MyResolver implements HandlerMethodArgumentResolver {

	//此方法会走两次,因为controller里是两个参数,(*^__^*) 嘻嘻
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		//如果controller里的参数是User1或者是User2类型,就用该参数解析器	
		return parameter.getParameterType()==User1.class || parameter.getParameterType()==User2.class;
	}
	//注意该方法返回值,一个Object就是Controller里的一个参数
	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		
		if (parameter.getParameterType() == User1.class) {
			User1 u=new User1();
			u.setName("呵呵");
			return u;
		}
		if (parameter.getParameterType() == User2.class) {
			User2 u=new User2();
			u.setName("哈哈");
			return u;
		}
	}
}
4.请求controller,会发现打印出
呵呵
哈哈
注:
解析json的是RequestResponseBodyMethodProcessor(List<HttpMessageConverter>);
解析form表单的是ServletModelAttributeMethodProcessor(true);
解析form/data的是RequestParamMethodArgumentResolver
上一篇:linux-shell脚本基础-2


下一篇:报错Ordinal parameter not bound