学无先后,达者为师

网站首页 编程语言 正文

@requestmapping获取请求参数

作者:仰望星空的快乐 更新时间: 2022-05-10 编程语言

从前端页面,向控制器方法中传递参数

1.原生servlet (太麻烦,一般不用)

 @RequestMapping(value = {"/param_yuansheng"})
    public String get_param(HttpServletRequest request)
    { //servlet原生的方式   注意不能使用占位符方式传递参数,因为在传值时,
        // 占位符参数没办法获得参数名,只能是获得之后再赋名字
        //原生方式一般都不用,太麻烦
       String uname= request.getParameter("username");
       System.out.println(uname);
        return "test_param";
    }

2.直接获取参数

参数名和name要一一对应

点我跳转到形参获取参数值测试方法
//    通过请求的形参来获得请求参数  形参的参数名 和控件的name名一定要对应
    @RequestMapping(value = {"/param_xingcan"})
    public String get_param(String username,String password)
    {
       System.out.println(username);
       System.out.println(password);
        return "test_param";
    }


3.如果有多个name相同的控件,比如说多选框

发送的get请求会是这样的

http://localhost:8080/Springmvcdemo2/param_duogetongmingcanshu?uname=123&upwd=123&hobbis=b&hobbis=c&hobbis=a

发送的post请求会是这样

html页面:

多个同名参数
用户名 数组获取 字符串获取

1.可以用string接收,会得到选中的控件的value b,a,c的字符串 中间用,号隔开
2.可以用数组接收,会得到选中控件的value的数组[b, c,a]

 @RequestMapping(value = {"param_duogetongmingcanshu"})
    public String get_duogetongmingcanshu1(
                    String uname, String hobbis, String[] hobbis2)
    {System.out.println("------传递多个参数-----");
        System.out.println("uname:"+uname);
        System.out.println("字符串获取hobbis:"+hobbis);
        System.out.println("数组获取hobbis2:"+Arrays.toString( hobbis2));
        return "test_param";
    }

 结果:

 4.按类传输

如果要传输的数据可以写成一个类时,可以新建一个user类,类中声明这三个参数和无参构造

注意类中的属性名和我要传的参数的名字一定要一一对应

 @RequestMapping(value = {"/param_class"})
    public String get_params(User user, HttpServletResponse response)
    {
        PrintWriter out = null;
        try {
            out = response.getWriter();
        } catch (IOException e) {
            e.printStackTrace();
        }
        out.println(user);
        System.out.println(user);
        return "target";
    }

直接传输类
用户名 爱好 用户id

 当我有个user类,有 id和name和 pwd三个属性,但我在获取用户输入时,不需要获取id(id在数据库表中自增),那我就需要给user类写一个name和pwd的两参数的构造函数,就可以传递user类了 如下

  @RequestMapping("/register_check")
    public String register_check(user user1)
    {
        System.out.println(user1);
        return null;
    }
用户名: 密码:

5. 用/传递参数 ,经常用于result风格的请求

SpringMVC支持路径中的占位符(重点)

原始方式:/deleteUser?id=1

restful方式:/deleteUser/1

SpringMVC路径中的占位符常用于Restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){
    System.out.println("id:"+id+",username:"+username);
    return "success";
}
//最终输出的内容为-->id:1,username:admin
测试路径中的占位符-->/testRest

7.解决获取请求参数的乱码问题

解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册  

拦截所有请求,并交给编码过滤器处理,将请求设置为param-value中指定的编码格式



    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    
    
        forceResponseEncoding
        true
    


    CharacterEncodingFilter
    /*

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

原文链接:https://blog.csdn.net/sharesb/article/details/124336950

栏目分类
最近更新