首先出现这种情况是因为有下面这种需求


  1. $.ajax({
  2. type: "POST",
  3. url: "${pageContext.request.contextPath}/courses",
  4. data: JSON.stringify({
  5. course:course,
  6. courseInfoList:courseInfoList
  7.        }),//将对象序列化成JSON字符串
  8. dataType:"json",
  9. contentType : 'application/json;charset=utf-8', //设置请求头信息
  10. success: function(data){
  11. },
  12. error: function(res){
  13. }
  14. });

也就是在ajax传输数据时有多种数据类型在data域中

从而就会有下面这种controller


  1. @RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
  2. public String createCourse(@RequestBody Course course, @RequestBody List<CourseInfo> courseInfoList)
  3. {
  4. System.out.println(coursePackage.getCourse());
  5. System.out.println(coursePackage.getCourseInfoList());
  6. return "/createCourse";
  7. }

这样就会出现400错误,服务器无法理解这个请求

原因:

@requestbody的含义是在当前对象获取整个http请求的body里面的所有数据,因此spring就不可能将这个数据强制包装成Course或者List类型,并且从@requestbody设计上来说,只获取一次就可以拿到请求body里面的所有数据,就没必要出现有多个@requestbody出现在controller的函数的形参列表当中

如果想解决这种问题

1.新建一个包装上面两种entity的entity类:


  1. package com.yyc.entity;
  2. import java.util.List;
  3. public class CoursePackage {
  4. public CoursePackage() {
  5. // TODO Auto-generated constructor stub
  6. }
  7. private Course course;
  8. private List<CourseInfo> courseInfoList;
  9. public void setCourse(Course course)
  10. {
  11. this.course = course;
  12. }
  13. public void setCourseInfoList(List<CourseInfo> courseInfoList)
  14. {
  15. this.courseInfoList = courseInfoList;
  16. }
  17. public Course getCourse()
  18. {
  19. return course;
  20. }
  21. public List<CourseInfo> getCourseInfoList()
  22. {
  23. return courseInfoList;
  24. }
  25. }

然后将controller函数改为


  1. @RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
  2. public String createCourse(@RequestBody CoursePackage coursePackage,Model model)
  3. {
  4. System.out.println(coursePackage.getCourse());
  5. System.out.println(coursePackage.getCourseInfoList());
  6. return "/createCourse";
  7. }

但是这样又显得比较不够简洁

2..用Map<String, Object>接受request body,自己反序列化到各个entity中。

例:下面这篇博客比较好:https://www.cnblogs.com/mahuan2/p/6008832.html

原文地址:https://blog.csdn.net/qq_34608620/article/details/80635139

controller函数中参数列表使用多个@RequestBody的更多相关文章

  1. php获取当前被调函数的参数列表

    下面是php中的一个获取当前别调用函数的参数列表的测试程序,感受一下php类库的强大之处: // 测试获取参数列表 getArgs('aaa', 'bbb', 'ccc', 123, true); f ...

  2. PHP函数可变参数列表的具体实现方法介绍

    PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会 ...

  3. php实现函数可变参数列表

    使用func_get_args().func_num_args().func_get_arg() 可以构造一个可变参数列表的函数. 首先大致介绍以上三个函数. (1)array func_get_ar ...

  4. Python之在函数中使用列表作为默认参数

      本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数.   我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...

  5. python函数中把列表(list)当参数时的"入坑"与"出坑"

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...

  6. Python在函数中使用列表作为默认参数

    在学习中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作为函数的默认参 ...

  7. day11 函数的参数列表

    """ 今日内容: 1.函数参数的分类 2.形参是对实参的值拷贝 3.实参的分类 4.形参的分类 5.打散机制 附1:字符串的比较 """ ...

  8. Python函数中的列表

    在看21天的Python书中写出了一个陷阱,但没给出解释,以下为代码陷阱

  9. python学习Day11 函数的参数列表

    复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...

随机推荐

  1. vue安装 js-cookie

    首先在命令行工具输入:npm install vue-js-cookie 安装完成之后在需要使用的页面导入:import Cookies from 'js-cookie' 这样就可以使用了,如下图,先 ...

  2. Linux学习-基于CentOS7的LAMP环境实现多虚拟主机

    一.实验环境 系统:CentOS7.6 主机:两台(一台也可以),一台实现apache+php-fpm (192.168.214.17),一台实现mysql服务器 (192.168.214.27) 软 ...

  3. 安装VS2017

    www.visualstudio.com/zh-hans/downloads/ https://visualstudio.microsoft.com/zh-hans/thank-you-downloa ...

  4. 贪心整理&一本通1431:钓鱼题解

    题目传送 (其实有一个更正经的题解) 看了许久,发现这题貌似就是一个动态规划啊,但毕竟是贪心题库里的题,还是想想用贪心解吧. 经过(借鉴大佬思路)十分复杂的思考后,终于理解出了这题的贪心思路.该题的难 ...

  5. 170816-关于Java基础的习题

    1. switch 括号里的可以是 int .char. byte.short.String,还有枚举类型,应用举例 不可以是long.double 2. 调用ma()方法之后,ma()方法将错误类型 ...

  6. 论文keywords和规则匹配的baseline

    详细的思路可以参照小论文树立0317 关键词分为以下几类: t/****一些通用的过滤词,这些通用的过滤词可以使用和节目一起出现的词语,结合tf-idf看出来么?*****/    public st ...

  7. Initialization of bean failed; nested exception is java.lang.

    网上搜寻各种解说,applicationContext-hibernate.xml 配置错误,jar冲突等等 现场错误图: 解决方法: asm-attrs.jar cglib-nodep-2.1_3. ...

  8. Python 代码控制Windows定时关机

    为了在规定时间内实现电脑关机,我使用python编写了几行代码,最简单的实现了关机操作,后续再进行其它功能的添加(操作页面,取消等) import os,time #获取命令行输入的关机时间 inpu ...

  9. (转)websphere内存溢出,手动导出was的phd和javacore文件

    原文:https://www.cnblogs.com/zhengbn/p/3499700.html 1:服务器-->服务器类型-->WebSphere Application Server ...

  10. 001-spring boot概述与课程概要

    一.Spring Boot介绍 Spring Boot的目的在于创建和启动新的基于spring框架的项目.Spring boot会选择最适合的Spring 子项目和第三方开源库进行整合.大部分Spri ...