@RequestMapping("/hello")public String hello(@CookieValue("_ga") String ga) {System.out.println(ga);return "success";}
同理,若是获取不存在的cookie,也会出现错误,解决方案和前面是一样的,就不再赘述了 。
传入对象类型当请求参数较为复杂时,比如一个对象,如果借助@RequestParam注解,就必须这样:
@RequestMapping("/hello")public String hello(@RequestParam("name") String name,@RequestParam("age") Integer age,@RequestParam("sex") Character sex,@RequestParam("address") String address) {System.out.println(name);System.out.println(age);System.out.println(sex);System.out.println(address);return "success";}
并且随着参数的增多,这种冗余的代码还要继续编写,为此,SpringMVC有一个更加优雅的解决方案,就是直接接收一个对象类型的参数,所以,要先将这些参数封装成一个对象:
@Data@ToStringpublic class Person {private String name;private Integer age;private Character sex;private String address;}
此时方法中只需接收一个Person类型的参数即可:
【超级赞!SpringMVC中的请求参数的完美处理技巧】@RequestMapping("/hello")public String hello(Person person) {System.out.println(person);return "success";}
它同时还支持级联封装,如:
@Data@ToStringpublic class Person {private String name;private Integer age;private Character sex;private Address address;}@Data@ToStringpublic class Address {private String province;private String city;}
现在Person对象中的地址属性仍然是一个对象,SpringMVC仍然能够将数据准确无误地封装到Person参数中,但请求参数在传递时就需要通过 . 来进行传送,比如:
http://localhost:8080/hello?name=zhangsan&sex=f&age=20&address.province=jiangxi&address.city=nanchang
需要注意的是请求参数中的参数名必须和对象中定义的属性名一致 。
传入原生API有时候一些需求也不得不使用到原生的API,比如设置cookie、session等,SpringMVC当然也考虑到了这一点,所以若是想使用原生的API,则直接写到方法的入参中即可,如:
@RequestMapping("/hello")public String hello(HttpServletResponse response) {Cookie cookie = new Cookie("test", "test");response.addCookie(cookie);return "success";}
想操作Session,就将HttpSession作为参数传入:
@RequestMapping("/hello")public String hello(HttpSession session) {session.setAttribute("test","test");return "success";}
SpringMVC支持以下九个ServletAPI的对象:
1.HttpServletRequest2.HttpServletResponse3.HttpSession4.JAVA.security.Principal5.Locale6.InputStream7.OutputStream8.Reader9.Writer
这九个对象都能够直接以参数的形式传入方法中 。
解决乱码问题如果在发送请求时携带的参数是中文的,就会产生乱码,在原生的Servlet开发中,我们通常使用:
request.setCharacterEncoding("UTF-8");
但这是用来解决POST请求乱码的,对于响应的乱码,应使用:
response.setContentType("text/html;charset=utf-8");
然而在SpringMVC中,我们通常不会使用到HttpServletRequest和HttpServletResponse对象,那么乱码问题该如何解决呢?
可以定义一个Filter过滤器,来拦截所有请求,并在过滤器中集中处理乱码的问题,SpringMVC已经考虑到了这一点,并为我们提供了一个专门解决乱码问题的过滤器CharacterEncodingFilter,只需在web.xml文件中进行配置:
<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
注意:若项目中配置了多个Filter,则CharacterEncodingFilter一定要配置在其它Filter之前 。
以上便是有关SpringMVC中处理请求参数的全部内容!
推荐阅读
- 记一次springmvc设置aop切面失败到解决
- 重学SpringMVC:框架原理解读 + 简单入门程序+组件分析.
- 超级冷的段子简短又爆笑
- 乐基儿|41岁乐基儿近照难掩丰腴,却被赞胖美人,穿对衣服比瘦身还重要?
- 网友热议|北京一男子得知自己密接 独守车内:网友齐赞好邻居
- 赞美普洱茶句子,喝茶发朋友圈的精美句子
- 应届生|超一半受访应届生直言求职最大难题是招聘信息不透明,你赞同吗?
- 发型|爱美女士都在剪的发型,优雅时尚还显瘦,超级有魅力
- 春季养肝试试蜂蜜泡蒜 推荐4款超级养肝粥
- 日本|大阪关西世博会开启吉祥物征名 网友点赞“邪神”