本文主要讨论spring-boot如何获取前端传过来的参数,这些参数主要有两大类,一类是URL里的参数,一个是请求body里的参数
通过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; }
请求一下接口
先来思考一个问题,当前端传递过来一个json的数据,我们的方法通过什么样的形式能够接受到参数呢?
一般来说有两种形式,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的实现类,这就会设计到装箱拆箱的过程,那么频繁的装箱拆箱会有一定到的性能损耗,所以这种方式一般并不推荐使用。
我们将接收请求参数的对象称作为数据传输对象,一般定义为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 获取前端传递参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
时间:2020-05-13
最近在公司项目中接到个需求.就是后台跟前端浏览器要保持长连接,后台主动往前台推数据. 网上查了下,websocket stomp协议处理这个很简单.尤其是跟springboot 集成. 但是由于开始是单机玩的,很顺利. 但是后面部署到生产搞集群的话,就会出问题了. 假如集群两个节点,浏览器A与节点A建立连接,A节点发的消息浏览器A节点肯定能收到.但是B节点由于没有跟浏览器A建立连接.B节点发的消息浏览器就收不到了. 网上也查了好多,但是没有一个说的很清楚的,也很多都是理论层面的. 还有很多思路都
在路由时传递参数,一般有两种形式,一种是拼接在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
研究ng4的官网,终于找到了我想要的方法.我想要的结果是用'&'拼接参数传送,这样阅读上是最好的. 否则很多'/'的拼接,容易混淆参数和组件名称. 一般我们页面跳转传递参数都是这样的格式: http://angular.io/api?uid=1&username=moon 但是在SPA单页应用中却是下面的结果居多[初级视频都是这样敷衍的] http://angular.io/api/1/moon 那么怎么实现我说的结果呢? 重点开始了. 实现从product页面跳转到product-det
前言 vue中路由跳转传参数有多种,自己常用的是下面的几种 通过router-link进行跳转 通过编程导航进行路由跳转 本文主要给大家介绍了关于vue路由参数传递遇到的一些坑,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 首先我的路由的定义 { path: '/b', name: 'B', component: resolve => require(['../pages/B.vue'], resolve) } 我从A组件跳转到B组件,并通过路由信息对象传递一些参数 this
springboot和vue结合的方案网络上的主要有以下两种: 1. [不推荐]在html中直接使用script标签引入vue和一些常用的组件,这种方式和以前传统的开发是一样的,只是可以很爽的使用vue的双向数据绑定,这种方式只适合于普通的全栈开发. 2.[推荐]使用vue官方的脚手架创建单独的前端工程项目,做到和后端完全独立开发和部署,后端单独部署一个纯restful的服务,而前端直接采用nginx来部署,这种称为完全的前后端分离架构开发模式,但是在分离中有很多api权限的问题需要解决,包括部
概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小.而 3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是支持缓存特性的.当然 Spring Boot默认使用的是 SimpleCacheConfiguration,即使用 ConcurrentMapCacheManager 来实现的缓存.但本文将讲述如何将 Guava Cache缓存应用到 Spring Boot应用中. Guava Cache是一个全内
今天传图片,用的base64字符串,POST方法,前端传送的时候总是莫名其妙的崩溃,去网上搜了半天,以为是文件大小被限制了,但是我这个是字符串接收,不是文件接收,于是又继续搜,原来post本身没有参数大小限制,但是tomcat给限制了,于是解决方式如下: 一.外置的tomcat 这个简单,直接在server.xml里面添加或者修改这句话: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout=
这篇文章主要介绍了Spring Boot项目中定制拦截器的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供HandlerInterceptor(拦截器)工具.根据文档,HandlerInterceptor的功能跟过滤器类似,但拦截器提供更精细的控制能力:在request被响应之前.request被响应之后.视
目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用"的方式.实际上,这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典 或者列表)的引用,就能修改对象的原始值--相当于通过"传引用"来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能 直接修改原始对象--相当于通过"传值"来传递对象. 你可以在很多讨论该问题
本文介绍了Spring Boot 项目中使用Swagger2的示例,分享给大家,具体如下: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency&g
(一)需求 在您的 springboot 项目中,可能会存在让用户下载文档的需求,比如让用户下载 readme 文档来更好地了解该项目的概况或使用方法. 所以,您需要为用户提供可以下载文件的 API ,将用户希望获取的文件作为下载资源返回给前端. (二)代码 maven 依赖 请您创建好一个 springboot 项目,一定要引入 web 依赖: <dependency> <groupId>org.springframework.boot</groupId> <a