• springmvc请求参数获取的几种方法


      

    装载:https://www.cnblogs.com/xiaoxi/p/5695783.html

    1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。

    复制代码
        /**
         * 1.直接把表单的参数写在Controller相应的方法的形参中
          * @param username
         * @param password
         * @return
         */
        @RequestMapping("/addUser1")
        public String addUser1(String username,String password) {
            System.out.println("username is:"+username);
            System.out.println("password is:"+password);
            return "demo/index";
        }
    复制代码

    url形式:http://localhost/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111 提交的参数需要和Controller方法中的入参名称一致。

    2、通过HttpServletRequest接收,post方式和get方式都可以。

    复制代码
        /**
         * 2、通过HttpServletRequest接收
          * @param request
         * @return
         */
        @RequestMapping("/addUser2")
        public String addUser2(HttpServletRequest request) {
            String username=request.getParameter("username");
            String password=request.getParameter("password");
            System.out.println("username is:"+username);
            System.out.println("password is:"+password);
            return "demo/index";
        }
    复制代码

    3、通过一个bean来接收,post方式和get方式都可以。
    (1)建立一个和表单中参数对应的bean

    复制代码
    package demo.model;
    
    public class UserModel {
        
        private String username;
        private String password;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
    }
    复制代码

    (2)用这个bean来封装接收的参数

    复制代码
        /**
         * 3、通过一个bean来接收
          * @param user
         * @return
         */
        @RequestMapping("/addUser3")
        public String addUser3(UserModel user) {
            System.out.println("username is:"+user.getUsername());
            System.out.println("password is:"+user.getPassword());
            return "demo/index";
        }
    复制代码

    4、通过@PathVariable获取路径中的参数

    复制代码
        /**
         * 4、通过@PathVariable获取路径中的参数
          * @param username
         * @param password
         * @return
         */
        @RequestMapping(value="/addUser4/{username}/{password}",method=RequestMethod.GET)
    public String addUser4(@PathVariable String username,@PathVariable String password) { System.out.println("username is:"+username); System.out.println("password is:"+password); return "demo/index"; }
    复制代码

    例如,访问http://localhost/SSMDemo/demo/addUser4/lixiaoxi/111111 路径时,则自动将URL中模板变量{username}和{password}绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=111111。
    5、使用@ModelAttribute注解获取POST请求的FORM表单数据
    Jsp表单如下:

    复制代码
    <form action ="<%=request.getContextPath()%>/demo/addUser5" method="post"> 
         用户名:&nbsp;<input type="text" name="username"/><br/>
         密&nbsp;&nbsp;码:&nbsp;<input type="password" name="password"/><br/>
         <input type="submit" value="提交"/> 
         <input type="reset" value="重置"/> 
    </form> 
    复制代码

    Java Controller如下:

    复制代码
        /**
         * 5、使用@ModelAttribute注解获取POST请求的FORM表单数据
          * @param user
         * @return
         */
        @RequestMapping(value="/addUser5",method=RequestMethod.POST)
        public String addUser5(@ModelAttribute("user") UserModel user) {
            System.out.println("username is:"+user.getUsername());
            System.out.println("password is:"+user.getPassword());
            return "demo/index";
        }
    复制代码

    6、用注解@RequestParam绑定请求参数到方法入参

    当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="username", required=false)

    复制代码
        /**
         * 6、用注解@RequestParam绑定请求参数到方法入参
          * @param username
         * @param password
         * @return
         */
        @RequestMapping(value="/addUser6",method=RequestMethod.GET)
        public String addUser6(@RequestParam("username") String username,@RequestParam("password") String password) {
            System.out.println("username is:"+username);
            System.out.println("password is:"+password);
            return "demo/index";
        }
    复制代码

    装载:https://www.cnblogs.com/jichen/p/8295830.html

    1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致

    前台ajax:

    $.ajax(

    "productForm?loginname2=jichen",// 发送请求的URL字符串。
    {
    dataType : "JSON", // 预期服务器返回的数据类型。如果服务器返回不一致,报 parseError
    type : "post" 或者 “get”, // 请求方式 POST或GET
    contentType:"application/json;charset=UTF-8", // 发送信息至服务器时的内容编码类型

    。。。

    });

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname2){
                                            (此处必须和前台传的参数名称一致)


    System.out.println(loginname2);打印的值就是 jichen

    }

    2,ajax 请求 为 post , contentType 必须为 "application/json;charset=UTF-8",data 必须用 JSON.stringify 格式化: JSON.stringify({id : 1}),则后台可以用 Map 类型的@RequestBody Map data 来接收,缺一不可;

    前台ajax:

    $.ajax(

    "productForm?loginname2=jichen",// 发送请求的URL字符串。
    {
    type : "post", 
    contentType:"application/json;charset=UTF-8", // 发送信息至服务器时的内容编码类型,如果不加 charset,则中文传到后台为乱码

    // 发送到服务器的数据。
    data:JSON.stringify({id : 1, loginname : "Spring MVC企业应用实战"})

    }

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname2,@RequestBody Map data){
                                           

    System.out.println(data.get("loginname"));打印出来 Spring MVC企业应用实战


    }

    3 ,ajax 请求 为 get,data 不能用 JSON.stringify 格式化: JSON.stringify({id : 1}),可以直接传一个对象:{id : 1},如果传的是一个对象,则相当于给 url 加?形式的参数 productForm?id=1 ,如果用 JSON.stringify 格式化,报错

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

     还有,如果为 get 请求,则后台 springMVC 不能用 @RequestBody注解,因为http 1.1协议不支持,如果使用,报错:

    Required request body is missing

    前台ajax:

    $.ajax("productForm?loginname=jichen",// 发送请求的URL字符串。
    {
    dataType : "JSON", // 预期服务器返回的数据类型。如果服务器返回不一致,报 parseError
    type : "get", 

    // 发送到服务器的数据。

    data:{id : 1, loginname : "Spring MVC企业应用实战",auto:123}

    }

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname){
                                           

    System.out.println(data.get("loginname"));打印出来 jichen,Spring MVC?????(使用?方式传参,中文为乱码)


    }

    4,如果把 3 的 type 改为 post,contentType 不能写 application/json (可直接省略,如果写成 application/json ,则data 对象传不到后台), data传的是对象{id : 1, loginname : "Spring MVC企业应用实战",auto:123},其它不变,则还是相当于给url带参,?id=1&auto=123.。。。,但是,传到后台的中文不是乱码,神奇!

    5,后台接收前台传递的参数的方式

    (1)直接用

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname){
                                           

    System.out.println(data.get("loginname"));打印出来 jichen,Spring MVC?????(使用?方式传参,中文为乱码)

    }

  • 相关阅读:
    shell脚本(多线程批量创建用户)
    听说你在从事前端开发?那这10个JavaScript的优化问题你不得不知道!
    解读网易易盾新一代IoT安全编译器Maze
    Java Web学习总结(12)——使用Session防止表单重复提交
    自动化内存管理和引用计数
    关于烂代码的那些事(下)
    rest_framwork序列化Serializer和ModelSerializer、url生成HyperlinkedIdentityField、深度depth、局部钩子校验
    版本控制
    解析器:request.body、request.POST、request.data
    权限之model对象权限,查看所有对象时,过滤指定对象。操作单条对象时,判断有没有操作权限
  • 原文地址:https://www.cnblogs.com/lirenhe/p/10737673.html
Copyright © 2020-2023  润新知