springboot如何去获取前端传递的参数的实现

本文主要讨论spring-boot如何获取前端传过来的参数,这些参数主要有两大类,一类是URL里的参数,一个是请求body里的参数

url里的参数

通过url里传过来的参数一般有三种方式,下面我们来看一下

路径参数

路径参数就是说在请求路径里携带了几个参数,比如有一个查询banner详情的接口,/v2/banner/123,这里的123就是参数,可以表示banner的ID。

下面我们设计了一个简陋的接口,来演示路径参数的获取

@RestController
@RequestMapping(value = "/v2/banner")
public class BannerController {

  @GetMapping("/{id}")
  public Integer getBannerDetail(@PathVariable Integer id){
    return id;
  }
}

获取banner详情完整接口路径是/v2/banner/{id},这里的id就是路径参数,在方法的传参里,用@PathVariable注解标明那个参数用来接收请求路径传递过来的值,通过postman发个请求看看

这里要注意,接口路由里定义的参数名要和方法参数里的定义名字要一样,如果不一样需要通过@PathVariable来指定**

@GetMapping("/{id}")
public Integer getBannerDetail(@PathVariable(name = "id") Integer id12){
  return id12;
}

查询参数

查询参数就是请求的url里?号后面跟的键值对,比如/v2/banner?id=123,下面我们重新定义一个借口,采用查询参数的形式获取banner详情

请求url里的查询参数通过@RequestParam注解可以和方法里的参数进行一一对应,比如现在有这么个url:/v2/banner?id=123&pos=3,那么接口的参数定义就得是@RequestParam Integer id, @RequestParam Integer pos,请求上面定义的接口看看返回值

路径参数和查询参数结合

路径参数和查询时可以同时使用的,那在定义接口的时候,同时使用这两种注解就行,比如下面的接口

@GetMapping("/{id}")
public Map<String, Object> getBannerDetail(@PathVariable Integer id, @RequestParam Integer pos){
  Map<String, Object> body = new HashMap<>();
  body.put("id", id);
  body.put("pos", pos);
  return body;
}

请求一下接口

请求body里的参数

先来思考一个问题,当前端传递过来一个json的数据,我们的方法通过什么样的形式能够接受到参数呢?

一般来说有两种形式,Map和自定义对象,下面我们分别来介绍一下。

Map

设计简单的banner创建接口,参数通过Map来接收,创建成功后,添加一个id,然后将传递的数据和id一起返回

@PostMapping(value = "/create")
public Map<String, Object> createBanner(@RequestBody Map<String, Object> banner){
  banner.put("id", 1243);
  return banner;
}

这里@RequestBody的这个注解来将body里的参数,转化成一个map,请求一下接口看看正常不:

上面我们使用的Map,它是一个接口,在具体接收数据的时候,肯定会用一个Map的实现类,这就会设计到装箱拆箱的过程,那么频繁的装箱拆箱会有一定到的性能损耗,所以这种方式一般并不推荐使用。

自定义对象Dto

我们将接收请求参数的对象称作为数据传输对象,一般定义为XXXDto,这里我们定义一个创建banner时用来接收参数的对象BannerCreateDto.

public class BannerCreateDto {
  private String name;
  private Integer pos;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getPos() {
    return pos;
  }

  public void setPos(Integer pos) {
    this.pos = pos;
  }
}

在Controller具体使用:

@PostMapping(value = "/create")
public Map<String, Object> createBanner(@RequestBody BannerCreateDto dto){
  Map<String, Object> res = new HashMap<>();
  res.put("id", 10000);
  res.put("name", dto.getName());
  res.put("pos", dto.getPos());
  return res;
}

用@RequestBody标记BannerCreateDto对象,spring-boot会自动调用对象的getter和setter给他赋值。我们请求一下看看:

总结

以上就是我们对spring-boot进行参数接收时处理方式的讨论,包括路径参数以及查询参数,还有body参数的接收,下篇文章我们将讨论一下参数的校验,敬请关注!!

到此这篇关于springboot如何去获取前端传递的参数的实现的文章就介绍到这了,更多相关springboot 获取前端传递参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot/VUE中路由传递参数的实现代码

    在路由时传递参数,一般有两种形式,一种是拼接在url地址中,另一种是查询参数.如:http://localhost:8080/router/tang/101?type=spor&num=12.下面根据代码看一下,VUE 和 Spring Boot 中各自是如何处理传递和接受参数的. Spring Boot package com.tang.demo1.controller; import org.springframework.web.bind.annotation.*; @RestContro

  • springboot websocket集群(stomp协议)连接时候传递参数

    最近在公司项目中接到个需求.就是后台跟前端浏览器要保持长连接,后台主动往前台推数据. 网上查了下,websocket stomp协议处理这个很简单.尤其是跟springboot 集成. 但是由于开始是单机玩的,很顺利. 但是后面部署到生产搞集群的话,就会出问题了. 假如集群两个节点,浏览器A与节点A建立连接,A节点发的消息浏览器A节点肯定能收到.但是B节点由于没有跟浏览器A建立连接.B节点发的消息浏览器就收不到了. 网上也查了好多,但是没有一个说的很清楚的,也很多都是理论层面的. 还有很多思路都

  • springboot如何去获取前端传递的参数的实现

    本文主要讨论spring-boot如何获取前端传过来的参数,这些参数主要有两大类,一类是URL里的参数,一个是请求body里的参数 url里的参数 通过url里传过来的参数一般有三种方式,下面我们来看一下 路径参数 路径参数就是说在请求路径里携带了几个参数,比如有一个查询banner详情的接口,/v2/banner/123,这里的123就是参数,可以表示banner的ID. 下面我们设计了一个简陋的接口,来演示路径参数的获取 @RestController @RequestMapping(val

  • @insert mybatis踩坑记录,实体接收前端传递的参数

    目录 @insert mybatis踩坑实体接收前端传递的参数 mybatis获取主键及参数传递的有关问题 获取主键值 不同的参数类型,${}和#{}的不同取值方式 @insert mybatis踩坑实体接收前端传递的参数 插入方法使用的使用entity实体对象进行接收的 @Insert(" insert into infor (name,pass,salary) values (#{infor.name},#{infor.pass},#{infor.salary})")     pu

  • SpringMVC 接收前端传递的参数四种方式小结

    目录 SpringMVC 接收前端传递的参数四种方式 @RequestParam 获取注解 @PathVariable获取注解 SpringMVC,可以不设置任何注解即可接收参数 SpringMVC,也可以自动包装成对象 @RequestBody 用来接收数组或者复杂对象 SpringMVC的自动封装(不传参也能进入) SpringMVC接收不到前端传递的参数原因 代码清单 SpringMVC 接收前端传递的参数四种方式 @RequestParam注解 @PathVariable注解 Sprin

  • .net core在服务器端获取api传递的参数过程

    这篇文章主要介绍了.net core在服务器端获取api传递的参数过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在 ActionFilterAttribute 的OnActionExecutionAsync 中使用如下代码从流中读取用户参数 //从文件流中读取传递测参数 using (var ms = new MemoryStream()) { context.HttpContext.Request.Body.Seek(0, 0);//将

  • Express无法通过req.body获取请求传递的数据解决方法

    目录 前言 1.问题描述 2. 解决办法 2.1 解决JSON内容格式 2.2.解决x-www-form-urlencoded内容格式 3.附 3.1.获取get请求参数 3.2.封装XMLHttpRequest 4.总结 前言 最近尝试重新封装XMLHttpRequest,在发post请求的时候,发现express通过req.body获取不到数据,req.body打印出来是一个空对象. 网上也试了网上各种办法,还是不成功,最后发现需要在XMLHttpRequest请求时设置一个请求头,来标识发

  • vue中使用element组件时事件想要传递其他参数的问题

    在使用element的上传组件时在一下几个钩子中传递其他参数 图中是文件上传时的几个钩子,参数为文件或文件列表或者其他参数,但是现在我想在原有参数上传递其他参数.比如我想在on-success的钩子中传递一个自定义参数i,原本是这样写的: :on-success="handleSuccess(i)" //handleSuccess是一个方法 但是发现这样写取不到自身原来的参数,后来在网上找到了一个比较好的方法,如下: :on-success="(value)=> han

  • postman中实现传递@RequestBody参数

    目录 传递@RequestBody参数 Java项目中类:(POST请求方法) postman中请求的参数 小结一下 @RequestBody修饰的对象传参数 例如有如下接口 那么在postman中传递参数呢? 传递@RequestBody参数 Java项目中类:(POST请求方法) @PostMapping(value="/fillInfo") public Result<Boolean> fillInfo(@RequestBody RegisterInfoBo info

  • SpringBoot过滤器如何获取POST请求的JSON参数

    目录 SpringBoot过滤器获取POST请求的JSON参数 想到了使用过滤器来实现这个功能 所以我们可以通过获取到输入流来获取body 从源码我们可以看到 我们创建一个类并继承这个包装类 有一点需要注意的 SpringBoot过滤器获取POST请求的JSON参数 项目中需要将每个请求的路径和请求参数以及响应结果,都记录在日志中,这样在出现问题时可以快速定位是哪里出现了问题. 想到了使用过滤器来实现这个功能 当请求来到过滤器时,会有一个Request参数,通过该参数就能获取到请求路径和请求参数

  • Vue中传递自定义参数到后端、后端获取数据并使用Map接收参数

    目录 1.未进行二次封装之前的操作 1.1 前端调用接口设计 1.2 后端接口设计 2.使用二次封装axios后的设计 2.1 封装的接口类型(只展示关键的接口调用部分) 2.2 前端调用接口设计 2.3 后端接口设计 3.友情提示 4.效果展示 在对axios进行二次封装的时候.为了统一接口的设计.有些传递的参数是直接拼接到URL地址栏中的.但是为了统一管理.不能将传递的参数直接拼接到地址栏中.如何自定义传递的参数到后端,后端如何获取到这些自定义的参数?如果解决这一问题,我就能随便传递参数,不

  • js获取地址栏中传递的参数(两种方法)

    第一种:字符串拆分法 window.location.href 或者 location.href 或者 window.location 获得地址栏中的所有内容 decodeURI()可以解码地址栏中的数据 恢复中文数据 window.search 获得地址栏中问号及问号之后的数据 //获取地址栏里(URL)传递的参数 function GetRequest(value) { //url例子:www.bicycle.com?id="123456"&Name="bicyc

随机推荐