nic*_*ost 5 post jpa angularjs http-status-code-415
我是REST和AngularJS的新手,但是经过几个小时的搜寻后,我找不到我的问题的任何答案:
我正在尝试从我的angularjs前端向我在Java中实现的后端(使用JPA)执行POST请求。
当我尝试创建json-object并执行POST时,我总是收到415(不支持的媒体类型)错误。
(实际上,我什至没有“进入”该服务的范围(即“ IN SERVICE”没有被打印到控制台)。如果我添加postData.toJSON(),它实际上会被“ POSTED”,但是到达null ...
如何成功格式化“ postData”以便成功发布?
(我也试图写Date属性而不带'“'-没运气...)
谢谢您的帮助!
前端:
app.controller('WorkController',function($ 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!");
})
}
Run Code Online (Sandbox Code Playgroud)
});
服务:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
无需构建和发送已解析的JSON对象,而是创建一个javascript对象并将其发送到您的帖子正文中。您可以重用postData对象,但是请尝试删除周围属性名称的“”。
尝试这个:
var postData = {
status : "OPEN",
startDate: "1338364250000",
endDate: "1336364253400",
workText : "Test"
};
Run Code Online (Sandbox Code Playgroud)
更新
看起来上面的方法本身不起作用。我认为可以推断出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.
Run Code Online (Sandbox Code Playgroud)
更新2
如果这不起作用,请使用Fiddler撰写发布请求,然后检查响应是什么。这里有一些提示:

然后,您可以在左侧窗格中查看服务器响应代码是什么。双击该行(忽略屏幕截图上的错误代码...您应该得到415)

双击响应行后,您可以在右窗格中检查并浏览以获取更多详细信息:

如果您可以使用«manufactured»JSON对象成功发布,则问题出在您的Angular代码上。如果不是,那肯定是您的Rest Service配置有问题。
您还可以检查在Fiddler2中使用Angular应用创建的POST的详细信息。这应该使您对正在发生的事情有很好的了解。
如果您有兴趣,可以使用Angular应用程序请求的一些屏幕截图更新问题。那肯定会帮助我们为您提供帮助:)
我终于找到了错误的原因!
\n\n在我的 Rest-Service 中,我直接期望我的 java 类作为参数。(我认为这会自动解析/反序列化)。我认为很天真......:)\n为了让它工作,我必须:
\n\n- 在我的 @POST 服务中期望一个字符串作为参数
\n\n-反序列化它(使用GSON)
\n\n这是(现在正在运行)服务:
\n\n@POST\n@Consumes(MediaType.APPLICATION_JSON)\npublic Response save(String wo){\n if(wo == null){\n System.out.println("Could nor persist work- null");\n return Response.noContent().build();\n } else{\n Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd\'T\'HHmm:ssZ").create();\n WorkDto dto = gson.fromJson(wo, WorkDto.class);\n Work workDao = WorkTransformator.transform(dto);\n workDao.persist();\n return Response.ok().build();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n再次感谢 Ant\xc3\xb3nio 的帮助!
\n| 归档时间: |
|
| 查看次数: |
44442 次 |
| 最近记录: |