springboot接口接收数组及多个参数的问题及解决

目录
  • springboot接口接收数组及多个参数问题
  • springboot接收复杂集合参数,集合对象

springboot接口接收数组及多个参数问题

本例为个人经历,必然存在认知局限与不足,欢迎指正以及提供更好方法。

若接口中需要接受数组,那么接口应该如何写呢?

一般而言我们会想到

@PostMapping("/xxxx")
public String test(List list){
    do sth;
}

假设我们写的接口正确,写完接口我希望使用postman来测试一下

params中似乎无法传数组呀

诶?在body中用json格式传参数不就好了吗!

于是,修改接口

@PostMapping("/xxxx")
public String test(@RequestBody List list){
    do sth;
}

问题解决~

但是往往我们写接口的时候需要接收的参数不止简单数组,有可能是一个非常复杂的对象。

这里我们将问题假设为需要接收的参数为对象+数组,如下。

{
	"abroad": {
		"id":5,
		"studentId":1,
		"projectName":"哈佛访学"
	},
	"params": ["id","studentId","projectName"]
}

自然地,我们一般会这么想:

@PostMapping("/xxxx")
public String test(@RequestBody Abroad abroad,@RequestBody List<String> params){
    do sth;
}

但是这是错的!!

如果使用@RequestBody,只允许有一个参数。那希望上传多个对象怎么办呢?对!就是包个对象!!类似下面这样:

@PostMapping("/xxxx")
public String test(@RequestBody ParaDTO paraDTO){
    do sth;
}

class ParaDTO{
    Abroad abroad;
    List<String> params;
}

解决~

springboot接收复杂集合参数,集合对象

springboot中,我们有这样一个场景,就是接受前端复杂的对象数组,或者多个数组。

这是我们可以用@RequestBody注解,来解析请求体中的数据。但是值得注意的是在GET请求是不能进行该种方式的操作,因为GET请求没有请求体。

发送的请求类型不能是GET请求,可以POST,PUT,DELETE等请求。

前端发送数据的时候,请求内容格式必须设置为contentType:‘application/json;charset=utf-8’,默认是``contentType:‘www-form-urlencoded’`

上传的数据必须使用JSON.stringify(…)处理

后端接受参数前需要加注解@RequestBody,且每一个请求的参数里面最多只能有一个该注解

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Springboot 接口需要接收参数类型是数组问题

    目录 接口需要接收参数类型是数组 多个参以“,”拼接传递即可 那么除了这样,我们还能怎么协调呢? springboot接口接收数组及多个参数问题 若接口中需要接受数组,那接口应该如何写呢? 在body中用json格式传参数不就好了吗! 问题解决- 接口需要接收参数类型是数组 如题,一般我们普遍采用的协调方式: 多个参以“,”拼接传递即可 如: 那么除了这样,我们还能怎么协调呢? 其实对应get请求,springmvc内部是已经支持了这种以“,”逗号拼接的方式,也就是说,传参方式不变,但是我们后台

  • SpringBoot读取yml文件中配置数组的2种方法

    目录 通过@ConfigurationProperties注解读取 1.读取的是配置在application.yml文件中的属性 2.如果配置是在一个单独的yml文件中 通过@Value注解变相读取,曲线救国方案 一直都在用Spring的@Value注解读取yml中的配置,这两天在读取配置的时候,想读取yml中配置的一个数组,通过@Vaule一直获取不到,通过一番资料的查询,才彻底清楚了@Vaule的使用情况. 在Spring中读取配置文件的快捷方法常见的有两种,一个是通过@Vaule注解进行单

  • SpringBoot如何接收数组参数的方法

    1.创建一个表单实体类,将数组封装到实体类中(Post提交) 表单类代码: @Data public class MyForm { private int[] ids; } 控制器代码: @Slf4j @RestController @RequestMapping("/info") public class InfoController { @PostMapping("/test") public String test(@RequestBody MyForm fo

  • springboot接口接收数组及多个参数的问题及解决

    目录 springboot接口接收数组及多个参数问题 springboot接收复杂集合参数,集合对象 springboot接口接收数组及多个参数问题 本例为个人经历,必然存在认知局限与不足,欢迎指正以及提供更好方法. 若接口中需要接受数组,那么接口应该如何写呢? 一般而言我们会想到 @PostMapping("/xxxx") public String test(List list){ do sth; } 假设我们写的接口正确,写完接口我希望使用postman来测试一下 params中

  • SpringBoot接口接收json参数解析

    目录 SpringBoot接口接收json参数 前言 前提 一.GET 二.DELETE 三.POST/PUT/PATCH Springboot restFul 参数检验 概述 常用注解 简单应用举例 自定义校验 抛出BindException而非MethodArgumentNotValidException SpringBoot接口接收json参数 前言 通常来讲,HTTP 方法会映射为 CRUD 动作,但这并不是严格的限制,有时候 PUT 也可以用来创建新的资源,POST 也可以用来更新资源

  • 解决Springboot 2 的@RequestParam接收数组异常问题

    目录 Springboot 2 的@RequestParam接收数组异常 所以这里给出解决方式: Springboot 的 用数组接参方法 Post接参 RequestParam 其中value 的值随传参改变 有几点需要注意: Springboot 2 的@RequestParam接收数组异常 最近Vue 开发前端,然后向后台springboot 2 传递数组,发现springboot 2 接收数组方式无法使用 -- @RequestParam("ids[]") List<St

  • springmvc接口接收参数与请求参数格式的整理

    目录 springmvc接口接收参数与请求参数格式 一.首先我们需要认识下http请求中的Content-Type 二.注解@RequestParam(value="id") 三.注解@RequestBody springmvc接口接受前端传递参数数据类型总结 一.springMVC中controller参数是自动注入 二. 接受前端传递的对象 三.小结一下 springmvc接口接收参数与请求参数格式 前言: 相信大家在刚开始接触接口定义与调用时遇到过接口接收不到请求参数的问题,本人

  • springboot接口参数校验JSR303的实现

    目录 一.在controller接口处理校验异常 二.统一异常处理 三.错误码枚举类 四.自定义参数校验注解 在 javax.validation.constraints包中定义了非常多的校验注解,引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependenc

  • 前端HTTP发POST请求携带参数与后端接口接收参数的实现

    目录 HTTP的GET请求与POST请求 常见HTTP内容类型Content-Type 后端收参方式-前端对应传参方式 application/json multipart/form-data 总结 参考 HTTP的GET请求与POST请求 HTTP请求方式有GET.POST.PUT.DELETE等八种,最常见的就是GET.POST,下面说一下GET请求,很简单. GET是按照规定参数只能写在URL里面(虽然可以有请求体但是不符合规定),没有请求体也就是data,那传就非常简单了,前端就是字符串

  • springmvc 传递和接收数组参数的实例

    java url中如何传递数组,springMVC框架controller类如何接收数组参数? 下面介绍一下URL中传递数组参数方法: dd.do?titles[]=col1&titles[]=col2&titles[]=col3 或者使用ajax方式传递: var param = {titles:['col1','col2','col3']}; $.ajax({url:"dd.php", type:"post", data:param, async

  • 关于Springboot | @RequestBody 接收到的参数对象属性为空的问题

    背景 今天在调试项目的时候遇到一个坑,用Postman发送一个post请求,在Springboot项目使用@RequestBody接收时参数总是报不存在,但是多次检查postman上的请求格式以及项目代码都没有问题 Postman: 请求参数: { "firstName":"fdsaf", "lastName":"dfasdf" } Controller: Entity 通过debug模式可以发现传进到实体的参数都为null

随机推荐