substring java,SpringMvc-HandlerMethodArgumentResolver

 2023-10-15 阅读 30 评论 0

摘要:該接口并不是責任鏈模式,也就是說,spring發現一個解析器能解析該參數的時候,spring不會再去調用下一個解析器,所以,這里首先拋出一個問題的答案:如果我想使用自己定義的解析器,應該如何使用呢?答案是應該在Controlle

該接口并不是責任鏈模式,也就是說,spring發現一個解析器能解析該參數的時候,spring不會再去調用下一個解析器,所以,這里首先拋出一個問題的答案:如果我想使用自己定義的解析器,應該如何使用呢?答案是應該在Controller的方法中的參數前,加上一個自己定義的獨有的注解

使用場景:之前我遇見過,前臺傳遞的數據格式是PHP遵循的數據規范,是這個樣子的:{"user_name":"hehe"},因為SpringMVC中只能對駝峰標識(userName)解析,而不能對下劃線這種格式解析,所以此處應該自定義參數解析器
1.定義兩個實體類

public class User1(){private String userName;
}
public class User2(){private String userName;
}

2.定義1個Controller

@Controller
public class MyController{@RequestMapping("m1")public void m1(User1 u1,User2 u2){//注意此處是兩個參數System.out.println(u1.getName());System.out.println(u2.getName());}
}

3.自定義HandlerMethodArgumentResolver


public class MyResolver implements HandlerMethodArgumentResolver {//此方法會走兩次,因為controller里是兩個參數,(*^__^*) 嘻嘻@Overridepublic boolean supportsParameter(MethodParameter parameter) {//如果controller里的參數是User1或者是User2類型,就用該參數解析器	return parameter.getParameterType()==User1.class || parameter.getParameterType()==User2.class;}//注意該方法返回值,一個Object就是Controller里的一個參數@Overridepublic 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;}}
}

substring java,4.請求controller,會發現打印出

呵呵
哈哈

注:
解析json的是RequestResponseBodyMethodProcessor(List);
解析form表單的是ServletModelAttributeMethodProcessor(true);
解析form/data的是RequestParamMethodArgumentResolver

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/137081.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息