博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMvc-HandlerMethodArgumentResolver
阅读量:4303 次
发布时间:2019-05-27

本文共 1466 字,大约阅读时间需要 4 分钟。

注意:该接口并不是责任链模式,也就是说,spring发现一个解析器能解析该参数的时候,spring不会再去调用下一个解析器

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

1.实体类public class User1(){	private String userName;}public class User2(){	private String userName;}2.定义Controller@Controllerpublic class MyController{	@RequestMapping("m1")	public void m1(User1 u1,User2 u2){		//注意此处是两个参数		System.out.println(u1.getName());		System.out.println(u2.getName());	}}自定义HandlerMethodArgumentResolverpublic 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
);解析form表单的是ServletModelAttributeMethodProcessor(true);解析form/data的是RequestParamMethodArgumentResolver

转载地址:http://othws.baihongyu.com/

你可能感兴趣的文章
Linux内核分析 期中总结
查看>>
RHEL8.0-beta-1.ISO
查看>>
Sublime Text 2以及Zen Coding
查看>>
scrapy相关
查看>>
[Android] 状态栏的一些认识
查看>>
[iOS]圆形进度条及计时功能
查看>>
【教程】模拟登陆百度之Java代码版
查看>>
最短路问题
查看>>
杭电ACM 2052 Picture
查看>>
LeetCode 350. Intersection of Two Arrays II
查看>>
DB2时间操作
查看>>
滚动相册
查看>>
《剑指offer》连续子数组的最大和
查看>>
CAD 快捷键Ctrl+2 Ctrl+3
查看>>
SU Demos-06Selecting Traces
查看>>
谈谈__proto__和prototype的区别
查看>>
中正平和的出处
查看>>
结对作业(返回一个整数数组中最大子数组的和——数组首尾相接)
查看>>
个人总结
查看>>
iOS 时间选择器禁止选取系统时间之前的时间
查看>>