zoukankan      html  css  js  c++  java
  • springmvc请求参数获取的几种方法

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

     1 /**
     2      * 1.直接把表单的参数写在Controller相应的方法的形参中
     3       * @param username
     4      * @param password
     5      * @return
     6      */
     7     @RequestMapping("/addUser1")
     8     public String addUser1(String username,String password) {
     9         System.out.println("username is:"+username);
    10         System.out.println("password is:"+password);
    11         return "demo/index";
    12     }

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

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

     1 /**
     2      * 2、通过HttpServletRequest接收
     3       * @param request
     4      * @return
     5      */
     6     @RequestMapping("/addUser2")
     7     public String addUser2(HttpServletRequest request) {
     8         String username=request.getParameter("username");
     9         String password=request.getParameter("password");
    10         System.out.println("username is:"+username);
    11         System.out.println("password is:"+password);
    12         return "demo/index";
    13     }

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

     1 package demo.model;
     2 
     3 public class UserModel {
     4     
     5     private String username;
     6     private String password;
     7     public String getUsername() {
     8         return username;
     9     }
    10     public void setUsername(String username) {
    11         this.username = username;
    12     }
    13     public String getPassword() {
    14         return password;
    15     }
    16     public void setPassword(String password) {
    17         this.password = password;
    18     }
    19     
    20 }

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

     1 /**
     2      * 3、通过一个bean来接收
     3       * @param user
     4      * @return
     5      */
     6     @RequestMapping("/addUser3")
     7     public String addUser3(UserModel user) {
     8         System.out.println("username is:"+user.getUsername());
     9         System.out.println("password is:"+user.getPassword());
    10         return "demo/index";
    11     }

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

     1 /**
     2      * 4、通过@PathVariable获取路径中的参数
     3       * @param username
     4      * @param password
     5      * @return
     6      */
     7     @RequestMapping(value="/addUser4/{username}/{password}",method=RequestMethod.GET)
     8 public String addUser4(@PathVariable String username,@PathVariable String password) {
     9         System.out.println("username is:"+username);
    10         System.out.println("password is:"+password);
    11         return "demo/index";
    12     }

    例如,访问http://localhost/SSMDemo/demo/addUser4/lixiaoxi/111111 路径时,则自动将URL中模板变量{username}和{password}绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=111111。

    5、使用@ModelAttribute注解获取POST请求的FORM表单数据
    Jsp表单如下:

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

    Java Controller如下:

     1 /**
     2      * 5、使用@ModelAttribute注解获取POST请求的FORM表单数据
     3       * @param user
     4      * @return
     5      */
     6     @RequestMapping(value="/addUser5",method=RequestMethod.POST)
     7     public String addUser5(@ModelAttribute("user") UserModel user) {
     8         System.out.println("username is:"+user.getUsername());
     9         System.out.println("password is:"+user.getPassword());
    10         return "demo/index";
    11     }

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

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

     1 /**
     2      * 6、用注解@RequestParam绑定请求参数到方法入参
     3       * @param username
     4      * @param password
     5      * @return
     6      */
     7     @RequestMapping(value="/addUser6",method=RequestMethod.GET)
     8     public String addUser6(@RequestParam("username") String username,@RequestParam("password") String password) {
     9         System.out.println("username is:"+username);
    10         System.out.println("password is:"+password);
    11         return "demo/index";
    12     }

    7@RequestBody

    以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

    JavaScript 代码:

     1 <script type="text/javascript">  
     2     $(document).ready(function(){  
     3         var saveDataAry=[];  
     4         var data1={"userName":"test","address":"gz"};  
     5         var data2={"userName":"ququ","address":"gr"};  
     6         saveDataAry.push(data1);  
     7         saveDataAry.push(data2);         
     8         $.ajax({ 
     9             type:"POST", 
    10             url:"user/saveUser", 
    11             dataType:"json",      
    12             contentType:"application/json",               
    13             data:JSON.stringify(saveData), 
    14             success:function(data){ 
    15                                        
    16             } 
    17          }); 
    18     });  
    19 </script>

    Java代码

    1 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }})   
    2     public void saveUser(@RequestBody List<User> users) { 
    3          userService.batchSave(users); 
    4     } 

    8、: 使用@RequestBody来设置输入 ,@ResponseBody设置输出 (POST + JSON字符串形式)

    JS请求:

     1 //请求数据,登录账号 +密码
     2      var data = {
     3              userAccount: lock_username,
     4              userPasswd:hex_md5(lock_password).toUpperCase()
     5      }
     6 
     7      $.ajax({
     8             url : ctx + "/unlock.do",
     9             type : "POST",
    10             data : JSON.stringify(data), //转JSON字符串
    11             dataType: 'json',
    12             contentType:'application/json;charset=UTF-8', //contentType很重要   
    13             success : function(result) {
    14                 console.log(result);
    15             }
    16      });

    Controller处理:

     1 @RequestMapping(value = "/unlock", method = RequestMethod.POST,consumes = "application/json") 
     2     @ResponseBody
     3     public Object unlock(@RequestBody User user) {  
     4         JSONObject jsonObject = new JSONObject();  
     5 
     6         try{
     7             Assert.notNull(user.getUserAccount(), "解锁账号为空");
     8             Assert.notNull(user.getUserPasswd(), "解锁密码为空");
     9 
    10             User currentLoginUser = (User) MvcUtils.getSessionAttribute(Constants.LOGIN_USER);
    11             Assert.notNull(currentLoginUser, "登录用户已过期,请重新登录!");
    12 
    13             Assert.isTrue(StringUtils.equals(user.getUserAccount(),currentLoginUser.getUserAccount()), "解锁账号错误");
    14             Assert.isTrue(StringUtils.equalsIgnoreCase(user.getUserPasswd(),currentLoginUser.getUserPasswd()), "解锁密码错误");
    15 
    16 jsonObject.put("message", "解锁成功");  
    17 jsonObject.put("status", "success");
    18         }catch(Exception ex){
    19             jsonObject.put("message", ex.getMessage());  
    20                 jsonObject.put("status", "error");
    21         }
    22        return jsonObject;  
    23     }
     1 @Controller
     2 @ResponseBody
     3 public class HelloController {
     4 
     5     @RequestMapping(value = "/hello", method = RequestMethod.POST, consumes = "application/json")
     6     public String hello(@RequestBody String username) {
     7         System.out.println("接受参数name" + username);
     8         return username;
     9     }
    10 }
  • 相关阅读:
    小程序实现无限瀑布流
    Vue H5 项目模板
    Taro使用mobx做国际化小程序
    一次国际化记录以及平铺JSON数据
    Promise(interesting)
    返回状态码
    CSS属性兼容写法
    在DOM加载之前insertScript
    关于吸烟
    前端优化措施
  • 原文地址:https://www.cnblogs.com/yanghaoyu0624/p/12090112.html
Copyright © 2011-2022 走看看