Springmvc之接受请求参数

准备工作

    • 新建一个表单提交
      • 请求地址: http://localhost:8080/ProjectName/user/login.do
      • <form action="<%=request.getContextPath()%>/user/login.do" method="post">
        username:<input type="text" name="username"> <br>
        password:<input type="text" name="password"> <br>
        age:<input type="text" name="age">
        <input type="submit" value="提交">
        </form>

 

【不推荐】HttpServletRequest

  • 直接使用HttpServeletRequest作为方法参数,spring会自动为其注入
  • 需要手动转换参数的类型
  • @RequestMapping(value="/login.do")
    public String login(HttpServletRequest request,HttpServletResponse response){
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    int age=Integer.parseInt(request.getParameter("age")); //转换类型
    System.out.println(username+"--->"+password);
    return "success";
    }

    直接在方法中声明对应的参数(name的属性必须和方法参数一致)

      • 表单中的name属性要和方法中的参数一致
      • 涉及到类型转换,直接在方法中申明不同类型的参数即可
      • 优点: 方便,并且可以使Springmvc自动处理数据类型
    @RequestMapping(value = "/login.do")
    public String login(String username,String password,Integer age) {
    System.out.println(username + "--->" + password+"----->"+age);
    return "success";
    }

    【推荐】@RequestParam

    • 使用该注解可以获取请求参数,方法中的参数可以与表单中的name属性不一致
    • 使用@RequestParam这个获取的值必须包含在请求参数中,否则报错,除非设置required属性为false
      • /**
        * 使用@RequestParam获取请求参数
        * @RequestParam()中的value属性为form表单中对应的name属性
        * 自动转换数据类型,只需要定义方法参数为所需的数据类型即可,spring会为我们自动转换
        */
        @RequestMapping(value = "/login.do")
        public String login(@RequestParam(value = "username") String name,
        @RequestParam("password") String pwd,@RequestParam("age") Integer age) {
        System.out.println(name + "--->" + pwd+"----->"+age);
        return "success";
        }

        属性

          • value 指定请求中对应的属性名称,这个就像表单中定义的name属性
          • required
            指定是否这个参数必须包含在请求地址中,默认是true,即是如果不包含这个参数那么就会报错。
          • defaultValue 指定默认的值,如果设置了required=false,并且没有设置这个值,那么默认的是null,但是也是可以使用这个属性来设置参数默认的值。当然对于设置了int类型的参数,那么并没有指定其值,那么将会报错,因为int类型没有null,只有Integer类型的才有,因此需要设置成Integer
      • /*
        * 这里的获取请求参数中的username,age的值
        * 其中username的这个注解默认的是required=true,因此这个是不可以没有的
        * age的这个注解设置了required=false,表示可以没有这个参数,但是如果没有这个参数,那么默认的是null,但是int类型的没有null,因此也会是报错的,有两种解决方式:
        * 1) 通过defalutValue设置其默认的值
        * 2) 如果我们就想要设其为null,可以使用封装类Integer类型即可
        */
        @RequestMapping(value = "/testRequestParams")
        public String testRequestParams(@RequestParam(value="username") String username,@RequestParam(value="age",required=false) int age) {
        System.out.println("username,age "+ username+" , "+age);
        return SUCCESS;
        }

        【推荐】使用自定义数据类型(JavaBean)

        • 如果传过来的请求参数很多,那么我们使用上面的方法获取请求参数,需要申明很多的方法参数。但是我们可以将传递过来的请求参数封装成一个JavaBean,那么我们直接传入一个JavaBean对象即可接收全部的请求参数。
        • 声明一个User类,其中必须为每一个属性添加 set方法,并且其中的变量名要和表单中的name属性一致
        • public class User {
          private String username;
          private String password;
          private int age;
          public int getAge() {
          return age;
          }
          public void setAge(int age) {
          this.age = age;
          }
          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;
          }
          @Override
          public String toString() {
          return "User [username=" + username + ", password=" + password + "]";
          } }
            • 那么我们此时的UserController中的login方法如下:
          @RequestMapping(value = "/login.do")
          public String login(User user) {
          System.out.println(user);
          return "success";
          }

          总结

            • 以上的所有方法并不冲突,可以混合使用
          /**
          * 混合使用案例
          */
          @RequestMapping(value = "/login.do")
          public String login(User user,@RequestParam("gender")String gender) {
          System.out.println(user);
          return "success";
          }
          • 不建议使用HttpServletRequest方法获取,另外两种方法都是非常好用的方法,根据实际情况进行选取即可

Springmvc之接受请求参数二的更多相关文章

  1. SpringMvc接受请求参数的几种情况演示

    说明: 通常get请求获取的参数是在url后面,而post请求获取的是请求体当中的参数.因此两者在请求方式上会有所不同. 1.直接将接受的参数写在controller对应方法的形参当中(适用于get提 ...

  2. SpringMVC中post请求参数注解@requestBody使用问题

    一.httpClient发送Post 原文https://www.cnblogs.com/Vdiao/p/5339487.html public static String httpPostWithJ ...

  3. Struts2接受请求参数三种常用方法

    一 接受请求参数主要有三种:属性驱动 对象驱动 模型驱动<model Driven> 方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名 ...

  4. 【SpringMVC】获取请求参数

    通过ServletAPI获取 test.html <a th:href="@{/testServletAPI(username='admin',password=123456)}&qu ...

  5. struts2接受请求参数

    https://blog.csdn.net/y249839817/article/details/77702745 https://blog.csdn.net/nthack5730/article/d ...

  6. SpringMVC 接受请求参数、作用域传值

    目录 原生servlet接收参数 Spring MVC最基础的参数获取 接收基本数据类型参数 方法参数列表和请求参数不一致的处理方式 接收对象引用数据类型 接收复选框这种多个同名的参数 接收obj.f ...

  7. SpringMVC接受请求参数、

    1. 接收请求参数 1.1. [不推荐]通过HttpServletRequest 在处理请求的方法中,添加HttpServletRequest对象作为参数,在方法体中,直接调用参数对象的getPara ...

  8. 学习SpringMVC——如何获取请求参数

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...

  9. SpringMVC没有接受到参数的坑

    其实说上来也不是SpringMVC的坑. 相同的一份代码,我在windows上用mvn打成jar放到linux上执行,POST请求可以接收到参数: 但是我直接在linux上从git拉取分支,并在lin ...

随机推荐

  1. python测试开发django-37.外键(ForeignKey)查询

    前言 前面在admin后台页面通过设置外键,可以选择下拉框的选项,本篇主要讲解关于外键(ForeignKey)的查询 models设计 在上一篇的基础上新增一个BankName表,Card表通过外键关 ...

  2. python测试开发django-35.xadmin注册表信息

    前言 xadmin后台如果要对表的内容增删改查,跟之前的admin.py文件里面写注册表信息一样,需在admin.py同一级目录新建一个adminx.py的文件. 然后在adminx.py文件控制页面 ...

  3. Convolutional Neural Networks at Constrained Time Cost(精读)

    一.文献名字和作者     Convolutional Neural Networks at Constrained Time Cost,CVPR 2015 二.阅读时间      2015年6月30 ...

  4. url空格转码的问题

    上知乎在搜索框里输入"1-n 随机数"(中间有空格,然后会看到了这个界面)   最开始我使用的是chrome,发现有脚本报错了,以为是服务器维护了,但再一想,不对啊,刚刚明明是好的 ...

  5. 实用ExtJS教程100例-007:ExtJS中Window组件最小化

    在上一节中我们演示了如何使用ExtJS的Window组件,这篇内容中我们来演示一下如何将窗口最小化. 要让ExtJS标题栏中显示最小化按钮并不麻烦,只需要设置 minimizable: true 即可 ...

  6. 解决appcompat中各种奇葩的错误

    一.依赖/脱离appcompat 在新版本中Google跟新了一个依赖包,这个包包含了v4和v7的东西(v7是要依赖v4这个包的,所以用到v7时必须用一起的v4),只要你的编译版本compile wi ...

  7. [C#技术] DataSet(DataTable)轻松的通过Sum、Aver、Count等统计出相关结果

    我们在使用Sql ******这些数据库时,可以轻松的通过Sum.Aver.Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Serv ...

  8. C# 获取文件的MIME类型

    在C#中获取文件的MIME类型(Content Type)的方法如下 一.使用MimeMapping类 在System.Web程序集中,当前为静态类,就一个获取 // // 摘要: // 映射文档扩展 ...

  9. 第二十七章 springboot + zipkin(brave-okhttp实现)

    本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620 一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipki ...

  10. 在SharePoint Server 2010中更改“我的网站”

    在安装SharePoint Server 2010的时候,创建的第一个站点是一个“NetBIOS名称”的网站,而这个时候,“我的网站”(或称“个人网站”),也是基于此NetBIOS名称的,例如,如果你 ...