300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 后台使用@RequestBody接收 anglarJs向后台传递Json数据 报415或400错误

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

时间:2023-05-08 08:15:45

相关推荐

后台使用@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

导入项目就可以了

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。