AngularJS中$ http.put和$ http({method:'PUT'})之间的区别

Poo*_*oja 3 http http-put angularjs angularjs-http

我必须将一些json数据'PUT'发送到服务器.以下代码抛出错误

$rootScope.request.data = {"name": "John", "surname":"Doe"}
var uri = //some REST API
var action = $http({
    method: 'PUT',
    url: uri,
    data: $rootScope.request.data
});
Run Code Online (Sandbox Code Playgroud)

抛出的错误是:

找不到资源的流:资源{displayName ='null',uri ='/ signup'}(org.mule.module.apikit.exception.ApikitRuntimeException).消息有效内容的类型为:NullPayload

但是,当我这样做时,它的工作原理

$rootScope.request.data = {"name": "John", "surname":"Doe"}
var uri = //some REST API
var action = $http.put(uri, $rootScope.request.data);
Run Code Online (Sandbox Code Playgroud)

然后将'action'推入一个数组中,并使用$ q.all触发请求.成功和错误在$ q中处理

想知道他们之间有什么区别?我的第一次请求中是否遗漏了一些内容?

Poo*_*oja 5

解决了这个问题.感谢@rzysia指针.

当我比较请求时,第一种情况中的Content-Type被发送为'text/plain',而在第二种情况下它是'application/json'.REST API需要'application/json'作为内容类型.

添加以下代码就可以了

$rootScope.request.data = {"name": "John", "surname":"Doe"}
var uri = //some REST API
var action = $http({
    method: 'PUT',
    url: uri,
    headers: {"Content-Type": "application/json;charset=UTF-8"},
    data: $rootScope.request.data
});
Run Code Online (Sandbox Code Playgroud)

这些链接很有用:https://github.com/angular/angular.js/issues/2149并且没有使用Angular $ http设置Content-Type标头

非常感谢所有投入2位的人:)