SpringMVC---400错误The request sent by the client was syntactically incorrect ()
在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 ()的更多相关文章
- SpringMVC报错The request sent by the client was syntactically incorrect ()
springmvc数据绑定出的错 在数据绑定的时候一定要主意Controller方法中的参数名和jsp页面里的参数名字是否一致或者按照绑定的规范来写, 如果不一致,可能回报如下错误: The requ ...
- 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 ...
- 错误400-The request sent by the client was syntactically incorrect
springMVC中,某个页面提交时报400错误,如下图. 解决方法: 1.在网上找了一下,答案是通常遇到这个错误是因为前端jsp页面的控件名称和controller中接收的参数名称不一致.但 ...
- 错误The request sent by the client was syntactically incorrect ()的解决
http://www.cnblogs.com/xiandedanteng/p/4168609.html 这个错误是SpringMVC报出来的,见到它意味着html/jsp页面的控件名称 和 contr ...
- 错误:The request sent by the client was syntactically incorrect的解决
问题: 错误400-The request sent by the client was syntactically incorrect. springMVC中,某个页面提交时报400错误,如下图. ...
- 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 ...
- 又见The request sent by the client was syntactically incorrect ()
前几天遇到过这个问题(Ref:http://www.cnblogs.com/xiandedanteng/p/4168609.html),问题在页面的组件name和和注解的@param名匹配不对,这个好 ...
- "The request sent by the client was syntactically incorrect ()"问题定位及解决:
Spring MVC "The request sent by the client was syntactically incorrect ()"解决办法: 把spring日志级 ...
- The request sent by the client was syntactically incorrect问题解决
The request sent by the client was syntactically incorrect意思嘛,google翻译一下 通过日志不难看出,是由参数不匹配造成的. 所以对于Da ...
随机推荐
- Django book manage system
创建一个简易的可以增删改查book的书籍管理system urls.py from django.contrib import admin from django.urls import re_pat ...
- hdu 1556 A - Color the ball 数状数组做法
#include<bits/stdc++.h> using namespace std; ; int n; int c[maxn]; int lowbit(int x) { return ...
- python文件处理复习
1.创建文件 >>> file('test.txt','w') -->在当前路径下创建文件 test.txt是文件名 w是打开文件的方式,r是读,w是写,a是追加,如果当前 ...
- 小D课堂【SpringBoot】接口Http协议开发实战
---恢复内容开始--- ====================2.SpringBoot接口Http协议开发实战 ============================= 1.SpringBoot ...
- 配置文件schema约束
解释:https://blog.csdn.net/zh15732621679/article/details/79074380 操作:https://blog.csdn.net/lhg_55/arti ...
- Mongo 3.6.1版本Sharding集群配置
Mongo低版本和高版本的sharding集群配置,细节不太一样.目前网上的配置文档大都是针对低版本的.本人在配置3.6.1版本的mongosharding集群的过程中,碰到不少问题,官方文档没有直观 ...
- Java-简单的计算器(只能进行加法运算)
有两个关键的地方: 其一: JTextField field=new JTextField(10); 这是一个文本输入框,里面的参数10的意思是,这个输入框的长度为10列 其二:点击求和按钮,出结果 ...
- sql表连接方式
表连接有几种? sql表连接分成外连接.内连接和交叉连接. 一.外连接 概述: 外连接包括三种,分别是左外连接.右外连接.全外连接. 对应的sql关键字:LEFT/RIGHT/FULL OUTER ...
- yield return:使用.NET的状态机生成器
通过关键字词组yield return,.Net Framework(从2.0开始)会为我们生成一个状态机.状态机实际上就是一个可枚举的类型化集合 理解yield return的工作方式 关键字词组y ...
- 微软和Sun针对Java的世纪之战
1996年9月的某一天,微软浏览器部门的主管艾达姆·波茨瓦斯几经考量之后,提笔给时任微软CEO的比尔·盖茨写了一邮件,他非常恳切地提醒比尔·盖茨注意一个正在形成的威胁.他写到:”必须意识到Java不仅 ...