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

本文详细介绍了Java后端处理HTTP请求时,通过7种不同方式接收Request参数的方法,包括直接在Controller参数、@RequestParam、@RequestBody、实体类、@ModelAttribute、HttpServletRequest及@PathVariable等。每种方式的适用场景、限制条件和注意事项都有所阐述,帮助开发者更好地理解和运用这些方法。
摘要由CSDN通过智能技术生成

Java 后端接收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 = "/method03")
    public String method03(@RequestBody User user) {
        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实体类

@Data
@ToString
public class User {
    private String name;
    private Integer age;
    private Double money;
}

总结:

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值