springMVC获取请求参数的几种方式汇总

 更新时间:2022年04月06日 11:33:41   作者:我是一棵卷心菜  
在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结,下面这篇文章主要给大家介绍了关于springMVC获取请求参数的几种方式,需要的朋友可以参考下

一、前言

大家好,我是卷心菜,大二学生一枚。

大家在学习springMVC框架的时候,一定学习过使用这个框架来获取请求的参数,那么各位小伙伴们,获取请求参数有几种方法呢?使用哪种方式最好呢?在什么时候使用这些方法呢?那么这一篇文章,我就带大家来看一看这些问题的答案。

废话不多说,满满的干货,赶快来看看吧~

二、初步认识

那么什么是请求参数呢?

可以直接在请求地址中给于请求参数的值

还可以以表单提交的方式,例如:

<form>
    用户名:<input type="text" name="username"/><br/>
    密码:<input type="password" name="password"/><br/>
    爱好:<input type="checkbox" name="hobby" value="C++"/>C++
         <input type="checkbox" name="hobby" value="Java"/>Java
         <input type="checkbox" name="hobby" value="C"/>C<br/>
    <button type="submit">提交</button>
</form>

表单就是这样:

三、servletAPI

HttpServletRequest是我们在javaweb学习中学到的,它也可以用在我们springMVC框架中,将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象

具体代码如下:

    @RequestMapping("/one")
    public String testParam(HttpServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobbies = request.getParameterValues("hobby");
        return "success";
    }

当我们在表单中设置正确的请求地址后,提交表单时,就会调用该方法,然后根据表单的name属性值获取相应的参数值。相信大家可以看到,getParameter是获取单个属性的值,getParameterValues是获取多个属性的值。

四、方法参数

接下来介绍第二种方法。

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参

具体代码如下:

    @RequestMapping("/two")
    public String testTwo(String username, 
    						String password, 
    						String hobby) {
        System.out.println("username:" + username 
                            + ",password:" + password
                            + ",hobby:" + hobby);
        return "success";
    }

当然,也可以写成这样:

    @RequestMapping("/two")
    public String testTwo(String username, 
    						String password, 	
    						String[] hobby) {
        System.out.println("username:" + username
                            + ",password:" + password
                            + ",hobby:" + hobby);
        return "success";
    }

这两种都可以,第一种会把多个参数的值转换成一个数组;第二组会把参数值放进数组中,需要自己遍历得到结果。

五、@RequestParam

推荐使用这种方式,非常好用。

@RequestParam是将请求参数和控制器方法的形参创建映射关系

    @RequestMapping("/three")
    public String testThree(@RequestParam(value = "username",
                                          required = false,
                                          defaultValue = "hello") String username,
                            @RequestParam(value = "password") String password,
                            @RequestParam(value = "hobby") String hobby) {
        System.out.println("username:" + username
                + ",password:" + password
                + ",hobby:" + hobby);
        return "success";
    }

@RequestParam注解一共有三个属性:

  • value:指定为形参赋值的请求参数的参数名
  • required:设置是否必须传输此请求参数,默认值为true

若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required
String parameter ‘xxx’ is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null

  • defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

运行结果完全正确:

六、实体类

最后一种方式,可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

下面看代码:

public class User {
    private String username;
    private String password;
	private String[] hobby;
}

这个user实体类的getter和setter以及toString就不列出来了

    @RequestMapping("/four")
    public String testFour(User user) {
        System.out.println(user);
        return "success";
    }

测试一下:

提交后运行结果也是完全正确的:

七、总结

乐莫乐兮新相知,很高兴各位小伙伴可以坚持看完这篇文章。以上四种方式获取请求参数就介绍完了,大家可以根据自己的需要选择合适的方式哦~

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

相关文章

  • Spring bean 四种注入方式详解

    Spring bean 四种注入方式详解

    这篇文章主要介绍了Spring bean的实例化和IOC依赖注入详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • Java线程池ThreadPoolExecutor的使用及其原理详细解读

    Java线程池ThreadPoolExecutor的使用及其原理详细解读

    这篇文章主要介绍了Java线程池ThreadPoolExecutor的使用及其原理详细解读,线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务,线程池线程都是后台线程,需要的朋友可以参考下
    2023-12-12
  • springboot中的css样式显示不出了的几种情况

    springboot中的css样式显示不出了的几种情况

    这篇文章主要介绍了springboot中的css样式显示不出了的几种情况,具有很好的的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java中BigDecimal的基本运算(详解)

    Java中BigDecimal的基本运算(详解)

    下面小编就为大家带来一篇Java中BigDecimal的基本运算(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java保证对象在内存中唯一性的实现方法

    java保证对象在内存中唯一性的实现方法

    这篇文章主要介绍了java如何保证对象在内存中的唯一性,如果创建多个对象的话,可能会引发出各种各样的问题,这时,就需要我们保证这个对象在内存中的唯一性,需要的朋友可以参考下
    2019-06-06
  • java启动jar包修改JVM默认内存问题

    java启动jar包修改JVM默认内存问题

    这篇文章主要介绍了java启动jar包修改JVM默认内存问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java实现基于NIO的多线程Web服务器实例

    Java实现基于NIO的多线程Web服务器实例

    在本篇文章里小编给大家整理的是关于Java实现基于NIO的多线程Web服务器实例内容,需要的朋友们可以学习下。
    2020-03-03
  • Java中Integer方法实例详解

    Java中Integer方法实例详解

    这篇文章主要给大家介绍了关于Java中Integer方法的相关资料,Java中的Integer是int的包装类型,文中通过代码实例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Java System类用法实战案例

    Java System类用法实战案例

    这篇文章主要介绍了Java System类用法,结合具体实例形式分析了java使用System类获取系统环境变量信息相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • springBoot集成flowable的流程解析

    springBoot集成flowable的流程解析

    这篇文章主要介绍了springBoot集成flowable的流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论