我是REST和AngularJS的新手,但经过几个小时的谷歌搜索,我找不到任何问题的答案: 我正在尝试从我的angularjs前端到我在java中实现的后端(使用JPA)发出POST请求. 当我尝试创建一个json对象并
我正在尝试从我的angularjs前端到我在java中实现的后端(使用JPA)发出POST请求.
当我尝试创建一个json对象并执行POST时,我总是得到415(不支持的媒体类型)错误.
(实际上我甚至没有“进入”服务的范围(i.E.“IN SERVICE”没有打印到控制台)..
如果我添加postData.toJSON(),它实际上是“POSTed”,但到达null …
我如何格式化我的’postData’以便成功获得POST?
(我也尝试不用”’写日期属性 – 没有运气……)
谢谢您的帮助!
前端:
app.controller(‘WorkController’,函数($scope,$http){
$scope.saveWork = function () { var postData = { "status" : "OPEN", "startDate": "1338364250000", "endDate": "1336364253400", "WorkText" : "Test" }; $http.post("http://localhost:8080/service/v1/saveWork", postData) .success(function(data, status, headers, config){ console.log("IN SAVE WORK - SUCCESS"); console.log(status); }) .error(function(){ console.log("ERROR IN SAVE WORK!"); }) }
});
服务:
@POST @Consumes(MediaType.APPLICATION_JSON) public Response save(WorkDto wo){ System.out.println("IN SERVICE"); if(ass == null){ System.out.println("Could nor persist work- null"); return Response.noContent().build(); } else{ Work workDao = WorkTransformator.transform(wo); workDao.persist(); return Response.ok().build(); } }而不是构建和发送解析的JSON对象,而是创建一个javascript对象并将其发送到您的帖子正文中.您可以重用postData对象,但尝试删除周围的属性名称.
试试这个:
var postData = { status : "OPEN", startDate: "1338364250000", endDate: "1336364253400", workText : "Test" };
UPDATE
看起来上面不能单独工作.我认为Content-Type会受到影响.
你能尝试这样做的帖子请求:
$http({ method: 'POST', url: 'http://localhost:8080/service/v1/saveWork', data: postData, headers: { 'Content-Type': 'application/json' }}); // complete with your success and error handlers... // the purpose is to try to do the post request explicitly // declaring the Content-Type you want to send.
更新2
如果这不起作用,请使用Fiddler撰写帖子请求,并检查响应是什么.
这里有一些指示:
>如果您还没有Fiddler2,请下载它
>撰写如下截图中的请求
然后,您可以在左侧的窗格中查看服务器响应代码的内容.双击该行(忽略屏幕截图上的错误代码……你应该得到415)
双击响应行后,您可以在右侧窗格中检查并浏览更多详细信息:
如果你能成功发布一个«制造»JSON对象,那么问题就出在你的Angular代码上了.如果没有,那么您的Rest Service配置肯定有问题.
您还可以在Fiddler2中检查使用Angular应用程序制作的POSTS的详细信息.这应该可以让你很好地了解正在发生的事情.
如果您正在使用它,则可以使用Angular应用程序请求的一些屏幕截图更新您的问题.这肯定会帮助我们帮助你:)