解读SpringBoot接收List<Bean>参数问题(POST请求方式)

 更新时间:2022年09月22日 14:13:24   作者:小狐狸和小兔子  
这篇文章主要介绍了解读SpringBoot接收List<Bean>参数问题(POST请求方式),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

接收List<Bean>参数问题(POST请求方式)

接部门排序后,前端已经返回了我们想要的数据格式(采用FormData方式),但是后台一直迟迟无法接收到我想要的(不想用json字符串来接收,还得转),一脸问号,这是什么操作?一定是姿势不对

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:226)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:884)

看过很多文章,有的说建立一个实体类,把list对象放进去当成属性,然后会自动映射赋值,但那样有点麻烦,不想弄

上述异常的最终解决方案为前端Ajax请求时,添加contentType即可

jQuery.ajax({
    async: false,
    cache: false,
    type: 'POST',
    //添加
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    data: JSON.stringify(paramData),
    url: '...',
    error: function () {
        
    },
    success: function (data) {
        //console.log(data)
    }
});

后台使用@RequestBody注解对属性做映射即可,如下

    /**
     * 修改部门排序
     *
     * @param request
     * @param depts
     * @return
     */
    @PostMapping(value = "/sort")
    public DDResult updateDeptTreeSort(HttpServletRequest request, @RequestBody List<Dept> depts) {
        return DDResult.success(deptService.updateDeptTreeSort(depts));
    }

尝试过用如下方式传递,然鹅还是失败了

dept[0].id:10
dept[0].pid:null
dept[0].order:0
dept[1].id:20
dept[1].pid:null
dept[1].order:1

springboot接口参数为List

简单接口参数

springboot接口访问,如果是走http请求,那么参数会默认转换成键值对格式,或者是json字符串形式的。

今天就遇到一个场景,我需要一个list结构的参数,list里面又是对象,那我们该怎么传参呢?

我们不能再浏览器上直接拼接参数发请求了,例如:

这样的格式是不被允许的,请求会报错。

那么我们转换思路,既然是json格式的参数,那我们就传json格式

设置headers

Content-type 的值为application/json

组织传值参数list数据

在body中,传值参数,list 使用[]括起来

代码实现请求

public void queryLiveCourseInfoTest(){
   JSONArray jsonArray = new JSONArray();
   JSONObject json1 = new JSONObject();
   json1.put("dn","123");
   json1.put("bossCode","34455");
   jsonArray.add(json1);
   JSONObject json2 = new JSONObject();
   json2.put("dn","234");
   json2.put("bossCode","66666");
   jsonArray.add(json2);

   String arr = jsonArray.toJSONString();
   System.out.println("请求参数:"+arr);

   String url = nativUrl+"";
   try {
      HttpHeaders headers = new HttpHeaders();
      MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
      headers.setContentType(type);
      HttpEntity<ElecMeterDataApi> entity = new HttpEntity<ElecMeterDataApi>(arr,headers);
      String res = restTemplate.postForObject(url, entity, String.class);
      log.info("结果:"+res);
   } catch (RestClientException e) {
      log.error("请求异常" + e.getMessage());
   }
}

controller层设置两个注解

@ResponseBody 和@RequestBody

  • @ResponseBody 没有该注解的时候,会发生postman 请求找不到error 404;
  • @RequestBody 没有该注解的时候,会发生参数值传输不过去;

这样我们就可以实现通过接口直接传递list对象数据。

其中,list中的对象,我们在传参数时只要组织的json格式的数据中,包含该对象的属性以及对应值,接口参数的对象就可以接收到该属性值。

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

相关文章

  • 为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    这篇文章主要介绍了为spring get请求添加自定义的参数处理操作(如下划线转驼峰),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 详解前后端分离之Java后端

    详解前后端分离之Java后端

    这篇文章主要介绍了详解前后端分离之Java后端,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解Spring Cloud 断路器集群监控(Turbine)

    详解Spring Cloud 断路器集群监控(Turbine)

    这篇文章主要介绍了详解Spring Cloud 断路器集群监控(Turbine),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java HashMap在遍历时删除元素的实现

    Java HashMap在遍历时删除元素的实现

    本文主要介绍了Java HashMap在遍历时删除元素的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • k8s部署springboot实现前后端分离项目

    k8s部署springboot实现前后端分离项目

    本文主要介绍了k8s部署springboot实现前后端分离项目,主要包括配置文件、镜像构建和容器编排等方面,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 关于消息中间件RocketMQ的基本概念及功能

    关于消息中间件RocketMQ的基本概念及功能

    这篇文章主要介绍了关于消息中间件RocketMQ的基本概念及功能,RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,需要的朋友可以参考下
    2023-05-05
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    Intellij IDEA导入JAVA项目并启动(图文教程)

    这篇文章主要介绍了Intellij IDEA导入JAVA项目并启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java线程池高频面试题总结

    Java线程池高频面试题总结

    在进程和线程的相关面试题中还有一部分是关于多线程和线程池的,也是在这一部分中比较常考察的内容。本篇文章就带你了解一下,希望能给你带来帮助
    2021-08-08
  • Kotlin 和 Java 混合开发入门教程

    Kotlin 和 Java 混合开发入门教程

    这篇文章主要介绍了入门 Kotlin 和 Java 混合开发,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Spring Boot项目使用Flyway的详细教程

    Spring Boot项目使用Flyway的详细教程

    这篇文章主要介绍了Spring Boot项目使用Flyway,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论