后台使用@RequestBody接收,anglarJs向后台传递Json数据,报415或400错误

今天想到以前碰到的一个问题,在使用angularJs+ssm写东西时碰到的一个使用$http.post()传递Json时报错 415 (Unsupported Media Type) 400 (Bad Request) 错误。当时是这么写的:

后台是使用的SpringMVC的@RequestBody注解:

public @ResponseBody Map<String,Object> test(@RequestBody Map<String, Object> map){
	...
}

前台angularJs的是如此:

var data=['abc',123'];
$http.post(url,data).success( function(data) {..}

然而在提交数据的时候报错 415 (Unsupported Media Type)


当发生 415 错误时首先确认项目中是否导入了Jackson的一系列jar包(本文已经导入,就不在讨论)。


仔细一查,发现是请求文本类型

Content-Type:
application/x-www-form-urlencoded
的问题,不是我们需要的   application/json 如下:

所以换了另一种提交方式 :

	
var data=['abc',123'];
 $http({
	method : 'POST',
	url : url,
	data : data,
	headers : {
		'Content-type' : 'application/json;charset=UTF-8'
	}
}).success( function(data) {...}
然而这样的确不报 415 错误了,可是却报了 400 (Bad Request) 错误。这就懵逼了,这时又检查了请求的信息:

看着也没啥不对的啊,为啥就是报错了呢。

后来明白了,原来angularJs的transformRequest会帮你把数据进行处理,所以重新设置一下就可以成功提交了:

$http({
	method : 'POST',
	url : url,
	data : data,
	headers : {
		'Content-type' : 'application/json;charset=UTF-8'
	},
	transformRequest : function(obj) {
		return angular.toJson(obj);
	}
	}).success( function(data) {...}

到这里就完全可以解决400和415的错误了。

如果到这里还是出现 415 错误时就要考虑是不是没有导入@RequestBody和@ResponseBody所依赖的JacksonJar包了

核心包分别是:

jackson-annotations.jar,jackson-core.jar,jackson-databind.jar, jackson-mapper-asl.jar

导入项目就可以了

希望文章可以帮助到其他博友。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要确定@RequestBody是用于绑定HTTP请求的HTTP请求主体(body)到方法参数或方法返回值上的注解。当使用@RequestBody注解时,SpringBoot会自动将处理程序方法参数绑定到HTTP请求主体中的JSON对象上。 如果@RequestBody的请求主体JSON为null,则有可能是请求的Content-Type与数据类型不匹配。例如,请求的Content-Type为application/json,但是请求体的格式不是JSON,或者请求体中的JSON格式存在问题,导致SpringBoot无法将其转换为对象。 解决这个问题需要按照以下步骤进行: 1. 确认请求主体是否为null,这可以通过在方法中打印日志或使用调试器进行调试来实现。 2. 确认请求头中的Content-Type是否与请求主体的数据格式相匹配。 3. 确认请求体中的JSON格式是否正确,可以使用JSON 校验工具确认。 4. 如果以上步骤均无法解决问题,则可以考虑使用自定义JSON反序列化器。 在自定义反序列化器中,可以通过添加注解@JsonDeserialize(using = CustomDeserializer.class)来指定自定义反序列化器。这样,在接收JSON请求主体时,SpringBoot会使用自定义反序列化器将JSON数据转换为Java对象。如果仍然无法解决问题,可以查看SpringBoot的日志文件,查找相关错误信息进行解决。 总之,当SpringBoot的@RequestBody接收JSON为null时,需要仔细检查请求格式是否正确并考虑使用自定义反序列化器解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值