java中springMVC获取请求参数的方法

 更新时间:2023年05月04日 11:31:25   作者:算不出来没办法  
这篇文章主要介绍了java中springMVC获取请求参数的方法,springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,需要的朋友可以参考下

原生方式获取请求参数

html代码

<a th:href="@{/testServlet(username='admin',password=123456)}">测试原生Servlet获取请求参数</a><br>

接收参数代码

@RequestMapping(value = "/testServlet")
//形参位置的request表示当前请求
public String testServlet(HttpServletRequest request) {
    System.out.println(request.getParameter("username"));
    System.out.println(request.getParameter("password"));
    return "test";
}

这种方式当然可以接收到传递过来的参数,但是方式略显繁琐。

控制器方法形参获取请求参数

html代码

<a th:href="@{/testParam(username='admin',password=123456)}">测试使用控制器的形参获取请求参数</a><br>

接收代码,直接将传递过来的参数名写成函数形参来获取对应的值。

@RequestMapping(value = "/testParam")
public String testParam(String username, String password) {
    System.out.println("username = " + username + ", passwprd = " + password);
    return "test";
}

输出内容

 当然通过控制器方法形参获取请求参数还有几个我们需要注意的地方。

@RequestParam注解

使用这一个注解,可以在请求参数和形参之间建立映射关系,大致意思就是获取到传递过来的这一参数然后赋值给形参。@RequestParam注解有三个属性:

value属性:设置指定的请求参数名。

required属性:设置是否必须传输此参数,默认值为true,如果设置为true但是没有接收到这一个参数,那么将会报错。

defaultValue属性:设置参数的默认值,不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为空字符串时,则使用默认值为形参赋值。

例如我们修改传递过来的参数,下面只传递了参数名为username007的用户名,并且没有传递密码。

<a th:href="@{/testParam(username007='admin')}">测试使用控制器的形参获取请求参数</a><br>

接收参数代码 

@RequestMapping(value = "/testParam")
    public String testParam(@RequestParam(value = "username007", required = false, defaultValue = "默认username") String username,
                            @RequestParam(value = "password007", required = false, defaultValue = "默认password") String password) {
        System.out.println("username = " + username + ", passwprd = " + password);
        return "test";
    }

 输出结果

 从输出结果可以看出,由于我们传递了username007,@RequestParam注解讲其内容传递给了形参username,但是我们并没有传递password007,所以使用的是默认值。

@RequestHeader注解

使用这一个注解,可以将请求头信息和控制器方法的形参创建映射关系,@RequestHeader注解也有三个属性:value属性,required属性,defaultValue属性,用法同@RequestParam。

首先查看请求标头的信息如下

html代码

<a th:href="@{/testParam(username='admin',password='123456')}">测试使用控制器的形参获取请求参数</a><br>

 接收参数代码

@RequestMapping(value = "/testParam")
public String testParam(
        @RequestHeader(value = "Host", required = false, defaultValue = "默认Host") String host,
        @RequestHeader(value = "Cookie", required = false, defaultValue = "默认Cookie") String cookie,
        String username, String password) {
    System.out.println("username = " + username + ", passwprd = " + password);
    System.out.println("Host = " + host + ", Cookie = " + cookie);
    return "test";
}

输出结果 

 从输出结果我们可以看出,程序获取到了请求头的Host和Cookie信息,并且传递给了形参。相比于原生的ServletAPI获取请求头的信息,这种方式更加高效简便。

@CookieValue注解

使用这一个注解,可以将cookie数据和控制器方法的形参创建映射关系, @CookieValue注解一共有三个属性:value属性、required属性、defaultValue属性,用法同@RequestParam。

通过查看请求头的信息,我们可以看到Cookie数据如下

html代码

<a th:href="@{/testParam(username='admin',password='123456')}">测试使用控制器的形参获取请求参数</a><br>

接收参数代码

@RequestMapping(value = "/testParam")
    public String testParam(
            @CookieValue("JSESSIONID") String JSESSIONID,
            String username, String password) {
        System.out.println("username = " + username + ", passwprd = " + password);
        System.out.println("JSESSIONID = " + JSESSIONID);
        return "test";
    }

输出结果

相当于获取到了Cookie中的JSESSIONID属性下的信息。

通过POJO获取请求参数

想一想,要是我们提交的是一个表单,并且表单的提交内容十分的多,那我们岂不是要写很多个形参,而且也不方便维护,所以当参数很多时,我们可以用一个实体类来接收数据并进行操作。当浏览器传输的请求参数的参数名和实体类中的属性名一致时,请求参数就会为此属性赋值。其底层原理是通过反射set方法进行属性注入。

如果通过POJO获取请求参数出现了乱码问题,可以先在web.xml文件当中配置过滤器设置编码。

 web.xml文件配置过滤器代码

<!--配置过滤器-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--设置获取时的编码-->
    <init-param>
        <!--在springMVC源码当中有一个encoding属性表示编码方式,可以通过初始化这一参数来设置编码方式-->
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <!--获取响应时的编码-->
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<!--设置过滤器作用的范围-->
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

html代码

<form th:action="@{/testBean}" method="get">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br>
    年龄:<input type="text" name="age"><br>
    地址:<input type="text" name="location"><br>
    电话:<input type="text" name="phoneNumber"><br>
    邮箱:<input type="text" name="email"><br>
    <input type="submit" value="使用实体类接收请求参数">
</form>

实体类代码,就相当于根据表单设置了对应的属性,然后生成了属性的set和get方法,创建了对应的构造方法和空构造方法。

package com.mvc.bean;
public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String location;
    private String phoneNumber;
    private String sex;
    private String email;
    public User() {
    }
    public User(Integer id, String username, String password, Integer age, String location, String phoneNumber, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.location = location;
        this.phoneNumber = phoneNumber;
        this.sex = sex;
        this.email = email;
    }
    //属性的get和set方法这里写出,太占篇幅了。
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", location='" + location + '\'' +
                ", phoneNumber='" + phoneNumber + '\'' +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

接收代码

@RequestMapping(value = "/testBean")
public String testBean(User user) {
    System.out.println(user);
    return "test";
}

测试

输出结果

 这种方式可以很方便的接收数据并且进行相对于的数据库操作。

到此这篇关于java中springMVC获取请求参数的方法的文章就介绍到这了,更多相关springMVC获取请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何利用POI读取Excel行数

    Java如何利用POI读取Excel行数

    这篇文章主要介绍了java如何利用POI读取Excel行数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java List集合方法及遍历过程代码解析

    Java List集合方法及遍历过程代码解析

    这篇文章主要介绍了Java List集合方法及遍历过程代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java多线程创建及线程安全详解

    java多线程创建及线程安全详解

    多线程是日常开发中的常用知识,也是难用知识。通这篇文章主要给大家介绍了关于java多线程创建及线程安全的相关资料,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Servlet映射路径匹配解析详解

    Servlet映射路径匹配解析详解

    servlet是javaweb用来处理请求和响应的重要对象,本文将从源码的角度分析tomcat内部是如何根据请求路径匹配得到处理请求的servlet的,感兴趣的可以了解一下
    2022-08-08
  • Java实现UDP通信过程实例分析【服务器端与客户端】

    Java实现UDP通信过程实例分析【服务器端与客户端】

    这篇文章主要介绍了Java实现UDP通信过程,结合实例形式分析了java实现UDP服务器端与客户端相关操作技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • 深入了解Spring中的@Autowired和@Resource注解

    深入了解Spring中的@Autowired和@Resource注解

    Spring中的@Autowired和@Resource注解都可以实现依赖注入,但使用方式、注入策略和适用场景略有不同。本文将深入探讨这两种注解的原理、使用方法及优缺点,帮助读者更好地理解和运用Spring依赖注入机制
    2023-04-04
  • Java LocalDateTime常用操作方法

    Java LocalDateTime常用操作方法

    这篇文章主要介绍了Java LocalDateTime实用方法,Java8提供了新的时间接口LocalDateTime,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 关于struts2中Action名字的大小写问题浅谈

    关于struts2中Action名字的大小写问题浅谈

    这篇文章主要给大家介绍了关于struts2中Action名字大小写问题的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Java的Hibernate框架中复合主键映射的创建和使用教程

    Java的Hibernate框架中复合主键映射的创建和使用教程

    复合主键映射用起来比普通的增加主键字段要复杂,这里我们就来共同学习Java的Hibernate框架中复合主键映射的创建和使用教程,需要的朋友可以参考下
    2016-07-07
  • Java命名规范

    Java命名规范

    本文主要介绍了Java命名规范。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论