SpringMVC(四):数据处理和过滤器
1.前文中有第一种方式,就是直接在方法中加入输入的参数就可以了
-
这种情况下输入参数名和方法形参名必须要相同--就是我们形参名是a,前台传过来一定是a=1
@Controller public class RestfulStyile { //原来的方式要在URI最后增加?并且录入参数 http://localhost:8080/s04/add?a=1&b=2 @RequestMapping(value = "/add") public String test0( int a, int b, Model model){ int res = a+b; model.addAttribute("msg","结果为"+res); return "test"; } }
-
可以通过RequestParam注解定义别名
-
以下例子我们访问的就可以是user/t1?username=xxxx
@Controller @RequestMapping("/user") public class UserController { //user/t1?username @GetMapping("/t1") public String test1(@RequestParam("username") String name, Model model){ model.addAttribute("msg",name); return "test"; } }
3.如果传递的是一个对象:
/* 前端提交的是一个对象 如果传递的是类中的属性名,那么就会成为一个对象传入 */ @GetMapping("/t2") public String test2(User user,Model model){ System.out.println(user.toString()); model.addAttribute("msg",user.toString()); return "test"; }
-
User类
public class User { private int id; private String name; private int age; //省略get..等方法 }
测试
响应数据到前端
-
除了使用ModeAndView和Model以外,还可以使用ModelMap
-
ModelMap和Model的用法一样,这两个我看源码搜索外网也没看出啥区别...
@GetMapping("/t3") public String test3(ModelMap model){ model.addAttribute("msg","ControllerTest3"); return "test"; }
乱码问题
-
Tomcat的server.xml配置
找到这一行,添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
-
在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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>