Java 后端接收Request请求参数的多种方式汇总

 更新时间:2023年10月19日 10:41:22   作者:风月不相关ii  
本文给大家总结了后端接收Request请求参数的7种方式,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

后端接收Request请求参数的7种方式

1.直接在Controller 方法参数上配置参数名

 @RequestMapping("/method01")
    public String method01(String name, Integer age, Double mon) {
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setMoney(mon);
        return JSON.toJSONString(user);
    }

method01

这种格式接收的是method01?name=zhangsan&age=15&mon=20.0格式的传参,并且要求参数名与url 地址中携带的参数名完全一致;

这种形式传参与请求方式无关,get post .put 等皆可;

2.@RequestParam 接收url地址中的参数

@RequestMapping(value = "/method02")
    public String method02(@RequestParam("name") String name,
                           @RequestParam("age") Integer age,
                           @RequestParam(value = "money", required = false) Double mon) {
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setMoney(mon);
        return JSON.toJSONString(user);
    }

method02

这种方式原理上与第一种一致,都是接收请求url地址种的参数,所以与请求方式无关;

这种方式注解种的value值会去映射请求url 中的同名参数取参然后赋值给加注解的形参,所以注解中的参数名必须与url中一致,而方法形参名可以根据自身需求灵活变更;

注意加此注解的required 属性 默认为true,也就是接收请求时会根据value去url寻找同名参数,如果没找到会报错;

所以如果有某一参数可能不传的情况,需要将required属性设为false

3.@RequestBody 接收body中JSON字符串参数

@RequestMapping(value = "/method02")
    public String method02(@RequestParam("name") String name,
                           @RequestParam("age") Integer age,
                           @RequestParam(value = "money", required = false) Double mon) {
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setMoney(mon);
        return JSON.toJSONString(user);
    }

method03

上面两种方式都是通过从请求头(url) 中传参的方式实现获取参数,@RequestBody则是接收请求体中的JSON 字符串参数直接映射实体对象,所以body类型必须是JSON字符串;

注意实体类中的属性名称必须与JOSN串中的参数key名称完全一致,不同命参数无法正确接收;

使用此种方式推荐使用Post请求携带body参数,get请求虽然也可以携带body参数并请求成功但并不推荐这样操作,

通常get请求通过url携带参数可以根据url作为key缓存资源,常用的静态资源服务器都是这种原理,如果参数在body中这种方式就失效了

4.直接通过实体接收参数

@RequestMapping(value = "/method04")
    public String method04(User user) {
        return JSON.toJSONString(user);
    }

method05

这种方式要求请求中的参数名与实体中的属性名一致即可自动映射到实体属性中;

支持url拼接的多个params 传参

支持post请求 的form类型传参(form-data,x-www-form-urlencoded), 不支持JSON 传参

5.@ModelAttribute 接收实体参数

@RequestMapping("/method05")
    public String method05(@ModelAttribute("user") User user) {
        return JSON.toJSONString(user);
    }

method05

@ModelAttribute 注解主要作用是自动将数据暴露为模型数据用于视图页面展示时使用,比如此处注解value为user, 前端视图就可以通过${user.name}来获取绑定的命令对象的属性

此用法与方法4完全一致,支持url拼接的多个params 传参

可以用于接收url 或者from表单中的数据映射实体;

支持post请求 的form类型传参(form-data,x-www-form-urlencoded), 不支持JSON 传参

6.HttpServletRequest request接收参数

 @RequestMapping("/method06")
    public String method06(HttpServletRequest request) {
        User user = new User();
        user.setName(request.getParameter("name"));
        user.setAge(Integer.valueOf(request.getParameter("age")));
        user.setMoney(Double.parseDouble(request.getParameter("money")));
        return JSON.toJSONString(user);
    }

method06

传统的接收参数方式,可以接收url params 传参,支持post from类型传参,不支持JSON传参

注意如果请求中未传递指定名称的参数,取参时会报错

7.@PathVariable RestFul 风格传参

@RequestMapping(value = {"/method07/{name}/{age}/{money}","/method07/{name}/{money}"})
    public String method07(@PathVariable("name") String name,
                           @PathVariable(value = "age", required = false) Integer age,
                           @PathVariable("money") Double money) {
        User user = new User();
        user.setName(name);
        user.setMoney(money);
        user.setAge(age);
        return JSON.toJSONString(user);
    }

在这里插入图片描述

通过@PathVariable实现restFul 风格传参,直接将参数拼接到url地址中,支持get,post,put delete 等多种请求

required属性默认为true ,不传递参数会报错;

如果出现某个参数未传递的情况可以通过设置required属性为false并设置多个value 字符串的形式实现

User实体类

@RequestMapping(value = {"/method07/{name}/{age}/{money}","/method07/{name}/{money}"})
    public String method07(@PathVariable("name") String name,
                           @PathVariable(value = "age", required = false) Integer age,
                           @PathVariable("money") Double money) {
        User user = new User();
        user.setName(name);
        user.setMoney(money);
        user.setAge(age);
        return JSON.toJSONString(user);
    }

总结:

以上就是七种常见的请求方式,不足之处请多指正啦

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

相关文章

  • 详解Java的Hibernate框架中的注解与缓存

    详解Java的Hibernate框架中的注解与缓存

    这篇文章主要介绍了详解Java的Hibernate框架中的注解与缓存,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • java序列化与反序列化操作实例分析

    java序列化与反序列化操作实例分析

    这篇文章主要介绍了java序列化与反序列化操作,结合实例形式分析了java序列化与反序列化的概念与具体实现技巧,需要的朋友可以参考下
    2016-10-10
  • CAT分布式实时监控系统使用详解

    CAT分布式实时监控系统使用详解

    这篇文章主要为大家介绍了CAT分布式实时监控系统介绍详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Java常见问题之javac Hello.java找不到文件的解决方法

    Java常见问题之javac Hello.java找不到文件的解决方法

    刚开始编写java代码时,肯定会遇到各种各样的bug,当然对于初学者这也是能理解的,下面这篇文章主要给大家介绍了关于Java常见问题之javac Hello.java找不到文件解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • 一文详解RabbitMQ如何保证消息可靠性

    一文详解RabbitMQ如何保证消息可靠性

    这篇文章将详细介绍RabbitMQ的消息可靠性机制,如消息丢失,消息重复性消费,消息积压等问题,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • Mybatis查询时的延迟加载解析

    Mybatis查询时的延迟加载解析

    这篇文章主要介绍了Mybatis查询时的延迟加载解析,先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性能,因为查询单表要比关联查询多张表速度要快,延迟加载分为两种:深度延时加载,侵入式延迟加载,需要的朋友可以参考下
    2023-10-10
  • mybatis对于list更新sql语句的写法说明

    mybatis对于list更新sql语句的写法说明

    这篇文章主要介绍了mybatis对于list更新sql语句的写法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • spring在IoC容器中装配Bean详解

    spring在IoC容器中装配Bean详解

    这篇文章主要介绍了spring在IoC容器中装配Bean详解,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • SpringBoot 错误处理机制与自定义错误处理实现详解

    SpringBoot 错误处理机制与自定义错误处理实现详解

    这篇文章主要介绍了SpringBoot 错误处理机制与自定义错误处理实现详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 2018版java多线程面试题集合及答案

    2018版java多线程面试题集合及答案

    这篇文章主要为大家详细介绍了2018版java多线程面试题集合及答案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09

最新评论