超级赞!SpringMVC中的请求参数的完美处理技巧( 二 )


@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中处理请求参数的全部内容!




推荐阅读