controller函数中参数列表使用多个@RequestBody
首先出现这种情况是因为有下面这种需求
-
$.ajax({
-
type: "POST",
-
url: "${pageContext.request.contextPath}/courses",
-
data: JSON.stringify({
-
course:course,
-
courseInfoList:courseInfoList
-
}),//将对象序列化成JSON字符串
-
-
dataType:"json",
-
contentType : 'application/json;charset=utf-8', //设置请求头信息
-
success: function(data){
-
},
-
error: function(res){
-
}
-
});
也就是在ajax传输数据时有多种数据类型在data域中
从而就会有下面这种controller
-
@RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
-
public String createCourse(@RequestBody Course course, @RequestBody List<CourseInfo> courseInfoList)
-
{
-
System.out.println(coursePackage.getCourse());
-
System.out.println(coursePackage.getCourseInfoList());
-
-
return "/createCourse";
-
}
这样就会出现400错误,服务器无法理解这个请求
原因:
@requestbody的含义是在当前对象获取整个http请求的body里面的所有数据,因此spring就不可能将这个数据强制包装成Course或者List类型,并且从@requestbody设计上来说,只获取一次就可以拿到请求body里面的所有数据,就没必要出现有多个@requestbody出现在controller的函数的形参列表当中
如果想解决这种问题:
1.新建一个包装上面两种entity的entity类:
-
package com.yyc.entity;
-
-
import java.util.List;
-
-
public class CoursePackage {
-
-
public CoursePackage() {
-
// TODO Auto-generated constructor stub
-
}
-
-
private Course course;
-
-
private List<CourseInfo> courseInfoList;
-
-
public void setCourse(Course course)
-
{
-
this.course = course;
-
}
-
-
public void setCourseInfoList(List<CourseInfo> courseInfoList)
-
{
-
this.courseInfoList = courseInfoList;
-
}
-
-
public Course getCourse()
-
{
-
return course;
-
}
-
-
public List<CourseInfo> getCourseInfoList()
-
{
-
return courseInfoList;
-
}
-
-
}
然后将controller函数改为
-
@RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
-
public String createCourse(@RequestBody CoursePackage coursePackage,Model model)
-
{
-
System.out.println(coursePackage.getCourse());
-
System.out.println(coursePackage.getCourseInfoList());
-
return "/createCourse";
-
}
但是这样又显得比较不够简洁
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的更多相关文章
- php获取当前被调函数的参数列表
下面是php中的一个获取当前别调用函数的参数列表的测试程序,感受一下php类库的强大之处: // 测试获取参数列表 getArgs('aaa', 'bbb', 'ccc', 123, true); f ...
- PHP函数可变参数列表的具体实现方法介绍
PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会 ...
- php实现函数可变参数列表
使用func_get_args().func_num_args().func_get_arg() 可以构造一个可变参数列表的函数. 首先大致介绍以上三个函数. (1)array func_get_ar ...
- Python之在函数中使用列表作为默认参数
本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...
- python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...
- Python在函数中使用列表作为默认参数
在学习中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作为函数的默认参 ...
- day11 函数的参数列表
""" 今日内容: 1.函数参数的分类 2.形参是对实参的值拷贝 3.实参的分类 4.形参的分类 5.打散机制 附1:字符串的比较 """ ...
- Python函数中的列表
在看21天的Python书中写出了一个陷阱,但没给出解释,以下为代码陷阱
- python学习Day11 函数的参数列表
复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...
随机推荐
- Arduino-数学函数
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- Java——static
[static] <1>static成员变量存储在内存data segment区域,不是存放在堆中. <2>静态成员变量属于整个类,任何一个对象都可以访问这个值:如果没有对象, ...
- Codeforces 980D
这题其实挺水的,但我比较vegetable,交了好多次才过. 题意: 给定一个序列,把这个序列的所有连续子序列分组,每组中任意两个数相乘是个完全平方数,输出每个子序列最少分的组数: 思路: 先把每个数 ...
- 【bzoj3162】独钓寒江雪
*题目描述: *题解: 树哈希+组合数学.对于树的形态相同的子树就一起考虑. *代码: #include <cstdio> #include <cstring> #includ ...
- 20180827-Java网络编程
Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...
- Oracle update或alter表被锁住的问题
\\ 查询被锁的对象.来源.sid和serial select object_name, machine, s.sid, s.serial# from v$locked_object l, dba_o ...
- Apache2.4常用编译参数
转载文章,亲试 Apache2.4以后的版本编译依赖apr,所以,编译之前需要先安装apr及apr-util. 编译参数只是一个参考作用,这个参数是我平常使用的,具体工作中的需求还是要区别对待的 一些 ...
- yield(放弃、谦逊、礼让) - 瞬时的,暂时放了马上再抢
两个线程抢占CPU各自执行任务,代码如下: public class Demo03 { public static void main(String[] args) throws Interrupte ...
- list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...