首页 > 编程语言 >Java 接收参数的7种方式

Java 接收参数的7种方式

时间:2023-09-12 21:03:17浏览次数:70  
标签:传参 Java name url JSON 参数 user 接收

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);
    }

Java 接收参数的7种方式_java

这种格式接收的是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);
    }


Java 接收参数的7种方式_java_02

这种方式原理上与第一种一致,都是接收请求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);
    }

Java 接收参数的7种方式_java_03

上面两种方式都是通过从请求头(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);
    }

Java 接收参数的7种方式_java_04

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

支持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);
    }

Java 接收参数的7种方式_java_05

@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);
    }

Java 接收参数的7种方式_java_06

传统的接收参数方式,可以接收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);
    }

Java 接收参数的7种方式_java_07

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

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

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

标签:传参,Java,name,url,JSON,参数,user,接收
From: https://blog.51cto.com/u_16259600/7448237

相关文章

  • MT8168安卓核心板_MTK8168核心板规格参数
    MT8168核心板是一款高度整合、高效能、低耗电的应用智能模块,专为平板电脑、电子阅读器、智能家居和物联网应用等嵌入式设备提供出色的多媒体体验。该处理器采用先进而高效能的12nm制程技术,结合了四核ArmCortex-A53MPCoreTM中央处理器和主频可达2GHz的ArmNEON引擎,以及主频可达80......
  • 深入理解 @PostConstruct 注解及其在 Java 开发中的应用
    深入理解@PostConstruct注解及其在Java开发中的应用本文将深入探讨Java中的@PostConstruct注解,介绍其作用、使用方法和常见应用场景。我们将详细解释注解的生命周期和执行顺序,以及如何正确使用@PostConstruct注解来进行初始化操作。通过本文的学习,读者将对@PostConstru......
  • Java入门
    java入手注释pvsmJava入口点程序逻辑中枢sout输出//单行注释/**/多行注释/**回车文档注释标识符注意事项标识符不能含关键字标识符需大小写字母开头或$与_开头标识符后可接大小写字母与$_和数字的任意组合标识符大小写敏感八大基本数据类型整数类型字节......
  • Java入门
    java入手注释pvsmJava入口点程序逻辑中枢sout输出//单行注释/**/多行注释/**回车文档注释标识符注意事项标识符不能含关键字标识符需大小写字母开头或$与_开头标识符后可接大小写字母与$_和数字的任意组合标识符大小写敏感八大基本数据类型整数类型字节......
  • JavaScript深拷贝的具体实现方法解析
    什么是深拷贝?深拷贝是指创建一个新对象或数组,使其与原始对象或数组具有相同的值,但是两者是完全独立的,互不影响。深拷贝不仅复制了对象或数组本身,还递归复制了其所有嵌套的对象和数组,确保所有层级的数据都是独立的。实现深拷贝的方法在JavaScript中,实现深拷贝的方法有很多种,下面将介......
  • 无涯教程-JavaScript - TBILLPRICE函数
    描述TBILLPRICE函数返回面值$100的国库券的价格。语法TBILLPRICE(settlement,maturity,discount)争论Argument描述Required/OptionalSettlement国库券的结算日期。证券结算日期是发行国库券给买方的发行日期之后的日期。RequiredMaturity国库券的到期日。......
  • 初始JavaScript
    typora-copy-images-to:media基本语法JavaScript的历史: 在95年以前,就有很多上网的用户了,当时的带宽只有28.8kb/s,用户要进行表单的验证时,点击提交按钮,直接就将数据发送到服务器了,受限于带宽的关系,浏览器和服务器的通信很慢,大概一次通信需要30s的时间。 这样,问题就出现了,我们平常......
  • 无涯教程-JavaScript - SYD函数
    描述SYD函数返回指定期间资产的年折旧数字。语法SYD(cost,salvage,life,per)争论Argument描述Required/OptionalCostTheinitialcostoftheasset.RequiredSalvageThevalueattheendofthedepreciation(sometimescalledthesalvagevalueoftheass......
  • 怒赞了,阿里P8面试官推荐的Java高并发核心编程文档
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • JavaScript 本地时间时区变化问题
    WhatIsLocalMeanTime?由于电脑时区使用TimeZoneDatabase,所以本地时间会在1900年左右发生时区跳变,而JavaScript的Date默认遵循当前系统时区,它的构造函数要么接受一个UTC时间戳,要么接受本地时间(字符串或年月日时分秒)如果直接使用本地时间会发生以下问题:https:/......