SpringMVC(四):数据处理和过滤器

本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

 

 

处理前端提交的数据

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";
    }
}

 

2.如果输入参数名和形参名不一致:
  • 可以通过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>

 

posted @ 2020-04-13 20:28  renzhongpei  阅读(435)  评论(0编辑  收藏  举报