当前位置: 首页 > news >正文

中央纪委党风廉政建设杂志网站深圳龙岗区布吉街道

中央纪委党风廉政建设杂志网站,深圳龙岗区布吉街道,丽江建设工程信息网站,日本三线和韩国三线品牌对比前端数据与springboot java数据类型转换 springboot&mybatis中数组和字符串数据类型的转换-CSDN博客中曾经提到,在Spring Boot中,通过URL传参、payload中的key-value形式或json形式,将前端数据以字符串格式发送到后端,后端We…

前端数据与springboot java数据类型转换

springboot&mybatis中数组和字符串数据类型的转换-CSDN博客中曾经提到,在Spring Boot中,通过URL传参、payload中的key-value形式或json形式,将前端数据以字符串格式发送到后端,后端Web层控制器类(com.example.controller)中,根据使用的注解(比如@RequestBody)确定传参方式,并调用对应的内置类型转换器,来将前端传来的参数转换成相应的对象来接收这些数据 。本篇整理一下前端与springboot之间参数传递的几种常用注解和使用方式。

先从JMeter的三种请求形式说起

如果你熟悉JMeter,可以从这里看起,从自己熟悉的领域逐渐过渡到不熟悉的。如果不了解Jmeter,直接跳过,看springboot注解即可。

在JMeter Http post请求中,Header中的content-type有三种格式,分别为

  • 支持key-value数据格式的application/x-www-form-urlencoded
  • 支持json数据格式的application/json
  • 支持各种混合数据格式,以表单形式提交的multipart/form-data

那么,分别对应SpringBoot中的注解,分别为:

  • @RequestParam,
  • @RequestBody,
  • @RequestPart;

另外,@PathVariable注解仅供Http get请求使用。

@PathVariable

基本用法

http get请求中,所有的参数都在URL中,以字符串形式传递,然而在Controller中,需要使用java类型去接收,这里使用@PathVariable注解。它用于将请求URL中的某个部分作为方法的参数进行传递。通常配合@RequestMapping注解一起使用,将URL中的变量值绑定到Java方法的参数上。

例如,假设我们有以下路径:/books/{id},其中{id}是要提取的参数值。

前端js:

export function getBookById(id) {return request({url: '/books/' + id,   method: 'get'})
}

后端controller中我们可以使用@PathVariable注解将{id}绑定到Java方法的参数上,如下所示:

@GetMapping("/books/{id}") 
public String getBookById(@PathVariable("id") int bookId) {// 根据书籍ID获取书籍信息的逻辑处理 
// ... 
return "book details"; 
}

在上面的代码中,@PathVariable("id")注解将URI路径中的{id}参数进行数据类型转换,并绑定到函数的id参数上。这样,当我们访问/books/123时,id参数将被设置为123。

传递多个参数

使用逗号分隔参数

在路径中使用逗号分隔多个参数,然后在方法的参数列表中使用@PathVariable注解分别获取这些参数。例如:

export function getUser(id1,id2) {return request({url: '/users/' + id1+","+id2   method: 'get'})
}
@GetMapping("/users/{id1},{id2}")
public User getUser(@PathVariable("id1") Long id1, 
@PathVariable("id2") Long id2) {// 执行逻辑
}

使用占位符{}传递多个参数

可以在路径中使用占位符{}传递多个参数,然后在方法的参数列表中使用@PathVariable注解获取这些参数,并使用@PathVariable注解的value属性指定参数名。例如:

export function getUser(id1,id2) {return request({url: '/users/' + id1+"/"+id2,method: 'get'})
}
@GetMapping("/users/{id1}/{id2}")
public User getUser(@PathVariable("id1") Long id1, 
@PathVariable("id2") Long id2) {// 执行逻辑
}

 使用Map传递多个参数

可以使用Map来接收路径中的多个参数,其中Map的key为参数名,value为参数值。例如:

export function getUser(param) {return request({url: '/users/' + param,   method: 'get'})
}
@GetMapping("/users/{param}")
public User getUser(@PathVariable Map<String, String> param) {Long id1 = Long.valueOf(param.get("id1"));Long id2 = Long.valueOf(param.get("id2"));// 执行逻辑
}

 请求示例:GET /users/id1=1&id2=2

@RequestParam

基本用法

前面说过,@requestParam注解对应content-type中支持key-value数据格式的application/x-www-form-urlencoded,这种请求,参数有两种形式:

1、在URL中,但是使用?与前面的URI区分

2、在请求体中,但是是以key-value键值形式存在,而非json格式(区别于后面的@requestBody注解)

所以,前端axios中对应的参数为param。例如

export function getUser(param) {return request({url: '/users',   method: 'get',params: param})
}

 后端controller中:

@GetMapping("/users")
public User getUser(@requestParam Long param) {    // 执行逻辑
}

 需要传递多个参数时

1、列举

export function getUser(id1,id2) {return request({url: '/users',   method: 'get',params: {id1,id2}})
}//controller中
@GetMapping("/users")
public User getUser(@requestParam Long id1,Long id2) {    // 执行逻辑
}

2、使用自定义的实体类

//调用
let query = {
userName: myName,
userId: 1
};
this.getUser(query);//axios请求
export function getUser(query) {return request({url: '/users',   method: 'get',params: query})
}//controller中
@GetMapping("/users")
public User getUser(@requestParam myUser query) {String userName = query.getUserName();Long userId = query.getUserId();// 执行逻辑
}

@RequestBody

但是对于需要传递更多参数的请求,大多使用json格式传递参数,此时,@requestParam就不能满足需求,需要使用@RequestBody了,此时,前端axios中需要使用data来传参,而不能用params了。

//调用
let user = {
userName: myName,
userId: 1
};
this.addUser(user);//axios请求
export function addUser(user) {return request({url: '/addUser',   method: 'post',data: user})
}//controller中
@PostMapping("/addUser")
public User addUser(@requestBody myUser user) {String userName = user.getUserName();Long userId = user.getUserId();// 执行逻辑
}

总结

  • get请求中,可以使用@pathVariable和@requestParam注解
    • 当URL使用/url/{id}方式时,使用@pathVariable注解,从路径中获取参数。此时后端controller中是@GetMapping("/users/{id}")
    • 当URL使用/url?id=123方式时,使用@requestParam注解,从查询字符串中获取参数。此时后端controller中是@GetMapping("/users")
  • post请求中,可以使用@requestParam和@requestBody
    • @requestParam对应前端axios的参数为params
    • @requestBody对应前端axios的参数为data

使用时一定要注意前后端的对应 

 

http://www.tj-hxxt.cn/news/64138.html

相关文章:

  • 网站怎么做qq登录界面百度站长平台网址
  • 大连网站开发培训免费b站推广入口2023
  • 找人做试管婴儿的网站企业营销推广怎么做
  • 网站界面美观度徐州新站百度快照优化
  • 南京专业建站网络服务器图片
  • 前端和做网站惠州优化怎么做seo
  • 网站建设的切片是什么优化网络培训
  • 武汉 做网站网页模板建站系统
  • o2o网站开发价格竞价运营是做什么的
  • dw做网站怎么发布百度关键词投放
  • 现货交易平台代理长沙seo外包服务
  • 做网站赚钱多吗网络服务器价格
  • 小辰青岛网站建设百度问问首页
  • 私人网站制作国产长尾关键词拘挖掘
  • 网站要什么软件做外贸网站免费推广
  • 家教中介怎么利用网站来做的搜索热词排名
  • 网站开发与设计培训的就业前景市场监督管理局官网入口
  • 网站建设合同书下载平台推广引流怎么做
  • 网站建设大约需要多少钱指数基金投资指南
  • 优秀个人网站模板如何建立网站平台的步骤
  • 北京公司网站建设定百度官网登录入口手机版
  • 怎样做网站平台赚钱廊坊seo推广
  • 商务网站开发实训体会域名服务器ip地址查询
  • 网站成功上线报道客户管理系统
  • 国外网站建设现状软文投稿平台有哪些
  • 政府部门网站建设负责部门广告素材
  • 自己做网站步骤百度交易平台官网
  • 桂林北站地图网络营销的发展现状及趋势
  • 承德哪里做网站网络营销主要有哪些特点
  • 建网站的8个详细步骤上海seo优化公司