在SpringMVC中使用@RequestBody和@ModelAttribute注解时遇到了很多问题,现记录下来。

  @ModelAttribute这个注解主要是将客户端请求的参数绑定参数到一个对象上,不用将很多参数@RequestParam或是@PathVariable。

但是在使用过程中遇到了问题,

第一次Html端请求代码如下,请求方式1

// 简单键值对
var data = {
productTypeIds : vproducttypeid,
channelTypeId : vchanneltypeid,
userId : 1,
}; // 提交保存
$.ajax({
"type" : "POST",
"url" : chainelUtil.URL.ACTION_IMPORT,
"data" : data,
"success" : function(data) {
bootbox.alertTimeout("创建成功!");
},
"error" : function(data) {
bootbox.alertTimeout("创建失败!");
}
});

Controller代码如下:

@RequestMapping(value = "/importstorestore", method = RequestMethod.POST)
@ResponseBody
public Object importStoreToStoreTree(@ModelAttribute StoreStoreRelationVO storeRelationVO ) {
}

StoreStoreRelationVO代码如下:

@Component
public class StoreStoreRelationVO implements Serializable{ /**
*
*/
private static final long serialVersionUID = 1L; // 渠道关系实体
private StoreStoreEntity storeStoreEntity; // 渠道类型Id
private String channelTypeId; // 商品分类Id字符串以","分割
private String productTypeIds; // 商品分类Id List
private List<String> productTypeIdList; // 区域Id,目前版本可能用不上
private String regionId; // 当前登陆用户
private String userId;
// 省略getter setter
}

StoreStoreEntity如下:

@Entity
@Table(name = "base_store_store")
public class StoreStoreEntity implements Serializable{ /**
*
*/
private static final long serialVersionUID = 1L; @Id
@Column
@GenericGenerator(name = "idGenerator", strategy = "increment")
@GeneratedValue(generator = "idGenerator")
private Long id; // 上级id
private Long upstoreid; // 下级id
private Long downstoreid; // 所属渠道id
private Long channelid;
// 省略getter 和 setter
}

如上的请求没问,服务器端可以接受到数据。

但是如果将请求的参数修改为如下,对象中组合对象,因为StoreStoreRelationVO 有个属性是StoreStoreEntity

// StoreStoreEntity
var storeStore = {
upstoreid : vupstoreid,
downstoreid:vcurrentstoreid,
channelid:1,
};
// StoreStoreRelationVO 
var data = {
storeStoreEntity:storeStore,
productTypeIds : vproducttypeid,
channelTypeId : vchanneltypeid,
userId : 1,
};

如果用请求方式1请求,直接报错

HTTP Status 404 -


type Status report

message

description The requested resource is not available.


Apache Tomcat/7.0.52

我将Ajax请求参数改为Json,如下,请求方式2

// 提交保存
$.ajax({
"type" : "POST",
"dataType" : 'json',
"contentType" : "application/json;charset=UTF-8",
"url" : chainelUtil.URL.ACTION_IMPORT,"data" : JSON.stringify(data),
"success" : function(data) {
var messagetext = $('#message');
messagetext.html("已经向系统成功提交申请,创建成功!");
bootbox.alertTimeout("创建成功!");
},
"error" : function(data) {
var messagetext = $('#message');
messagetext.html("服务器繁忙,请重新提交!");
bootbox.alertTimeout("创建失败!");
}
});

服务器端不变,这样不报错了,但是storeRelationVO却接收不到数据,不能自动装载。

我将Controller中的@ModelAttribute修改为@RequestBody

storeRelationVO可以正常接受到数据。

----------------------------------------------------------------------

为什么Json就能正确成功呢,我又将Ajax改回到最初格式,参数格式不设定

$.ajax({
"type" : "POST",
"url" : chainelUtil.URL.ACTION_IMPORT,
"data" : data,
"success" : function(data) {
bootbox.alertTimeout("创建成功!");
},
"error" : function(data) {
bootbox.alertTimeout("创建失败!");
}
});

结果不出所料,报错,415 Unsupported Media Type

HTTP Status 415 -


type Status report

message

description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.


Apache Tomcat/7.0.52

看来用@RequestBody,需要传Json数据

----------------------------------

我将请求参数稍微改了一下,其余不变

var storeStore = {
upstoreid : vupstoreid,
downstoreid:vcurrentstoreid,
channelid:1,
}; var data = {
storeStoreEntity:storeStore,
productTypeIds : vproducttypeid,
channelTypeId : vchanneltypeid,
userid : 1,
};

结果报错,这个错我找了好久啊,最后发现一个大小写错误,userid应该对应实体中的userId,一个i应该是大写,所以请求参数不区分大小写!

HTTP Status 400 -


type Status report

message

description The request sent by the client was syntactically incorrect.


Apache Tomcat/7.0.52

SpringMVC---400错误The request sent by the client was syntactically incorrect ()的更多相关文章

  1. SpringMVC报错The request sent by the client was syntactically incorrect ()

    springmvc数据绑定出的错 在数据绑定的时候一定要主意Controller方法中的参数名和jsp页面里的参数名字是否一致或者按照绑定的规范来写, 如果不一致,可能回报如下错误: The requ ...

  2. HTTP Status 400 - description The request sent by the client was syntactically incorrect.

    HTTP Status 400 - type Status report message description The request sent by the client was syntacti ...

  3. 错误400-The request sent by the client was syntactically incorrect

    springMVC中,某个页面提交时报400错误,如下图.     解决方法: 1.在网上找了一下,答案是通常遇到这个错误是因为前端jsp页面的控件名称和controller中接收的参数名称不一致.但 ...

  4. 错误The request sent by the client was syntactically incorrect ()的解决

    http://www.cnblogs.com/xiandedanteng/p/4168609.html 这个错误是SpringMVC报出来的,见到它意味着html/jsp页面的控件名称 和 contr ...

  5. 错误:The request sent by the client was syntactically incorrect的解决

    问题: 错误400-The request sent by the client was syntactically incorrect. springMVC中,某个页面提交时报400错误,如下图. ...

  6. The request sent by the client was syntactically incorrect.

    HTTP Status 400 - type Status report message description The request sent by the client was syntacti ...

  7. 又见The request sent by the client was syntactically incorrect ()

    前几天遇到过这个问题(Ref:http://www.cnblogs.com/xiandedanteng/p/4168609.html),问题在页面的组件name和和注解的@param名匹配不对,这个好 ...

  8. "The request sent by the client was syntactically incorrect ()"问题定位及解决:

    Spring MVC "The request sent by the client was syntactically incorrect ()"解决办法: 把spring日志级 ...

  9. The request sent by the client was syntactically incorrect问题解决

    The request sent by the client was syntactically incorrect意思嘛,google翻译一下 通过日志不难看出,是由参数不匹配造成的. 所以对于Da ...

随机推荐

  1. css的标准模型和低版本的IE的盒子模型有什么不同?

    1. css的盒子模型:外边距(margin).内边距(padding).边界(border).内容区(width和height) 标准的css盒子模型与低版本的ie盒子模型的不同:宽高不一样 标准的 ...

  2. 手机端touch事件封装

    var touchEvent={ /*单次触摸事件*/ tap:function(element,fn){ var startTx, startTy; element.addEventListener ...

  3. C++学习(三十四)(C语言部分)之 链表

    1.栈和队列 操作 增查改删重点 插入删除先进先出 -->队列先进后出 -->栈2.链表 写之前先画图存储数据的方式 通过指针将所有的数据链在一起数据结构的目的 管理存储数据 方便快速查找 ...

  4. stack 的一些用法

    #include<bits/stdc++.h> using namespace std; int32_t main() { stack<int> st; st.push(); ...

  5. functional program language

    1.什么是函数式编程语言 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组 ...

  6. java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie

    https://blog.csdn.net/cml_blog/article/details/52135115 当项目中使用单点登录功能时,通常会使用cookie进行信息的保存,这样就可以在多个子域名 ...

  7. LeetCode - Diameter of Binary Tree

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...

  8. WCF 学习总结5 -- 消息拦截实现用户名验证(转)

    WCF建立在基于消息的通信这一概念基础上.通过方法调用(Method Call)形式体现的服务访问需要转化成具体的消息,并通过相应的编码(Encoding)才能通过传输通道发送到服务端:服务操作执行的 ...

  9. Linux系统运维故障排查

    一.思路 1.处理问题要求 2.一般思路 二.具体问题 1.网络问题 (1)网络不通 (2)网络很慢 2.硬件问题 3.操作系统问题 (1)系统无法正常启动 (2)系统运行慢或死机 4.服务或程序问题 ...

  10. 数学沉思录:古今数学思想的发展与演变 (Mario Livio 著)

    第1章 神秘的数学 (已看) 发现还是发明 第2章 神秘学:命理学家和哲学家 (已看) 毕达哥拉斯 进入柏拉图的洞穴 第3章 魔法师:大师和异端 (已看) 给我一个支点:我将撬起地球 阿基米德重写稿 ...