2014-04-03 92 views
2

我是很新的REST和AngularJS,但经过几个小时google搜索我找不到任何回答我的问题:

我想从我的angularjs前端执行POST请求到我在java中实现的后端(使用JPA)。

当我尝试创建json对象并执行POST时,我始终得到415(不支持的介质类型)错误。 (实际上我甚至没有“进入”服务范围(iE“IN SERVICE”不会打印到控制台)。 如果我添加postData.toJSON(),它实际上会获得“贴”,但到达零...

怎么做我必须格式化我的“POSTDATA”为了成功地把被公布?

(我也试过没有写日期的属性'“ ' - 没有运气......)

谢谢你的帮忙!


前端:

app.controller( 'WorkController',函数($范围,$ 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(); 
    } 
} 
+0

您的服务如何使用应用程序xml和应用程序json类型?我认为最喜欢json的人最适合AngularJS后端。实际上, – user3360944

+0

- 就我而言 - JSON是angularjs的默认内容类型。所以xml类型因此是不必要的 - 但避免这种类型不幸的是不能解决问题... – nicost

回答

3

我终于设法找到了我的错误原因!

在我的休息服务,我直接期待我的java类作为参数。 (我认为这会自动解析/反序列化)。很天真的我想...... :) 为了得到它的工作,我不得不:

-Expect String作为参数在我@POST服务

-Deserialize它(使用GSON)

这里是(现在工作)的服务:

​​

再次感谢安东尼奥的帮助!

+0

谢谢。那也是我的问题。 –

4

相反建设和发送解析的JSON对象,创建一个JavaScript对象,并发送在您的文章的身体。您可以重复使用您的postData对象,但尝试删除“”周围的属性名称。

试试这个:

var postData = { 
     status : "OPEN", 
     startDate: "1338364250000", 
     endDate: "1336364253400", 
     workText : "Test" 
}; 

UPDATE

看起来像上面的本身不工作。我认为内容类型会被感染。

你可以尝试做POST请求是这样的:

$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

如果没有工作,撰写使用招POST请求,并检查有什么反应。 下面是一些指针:

  • 下载Fiddler2,如果你不已经有截图它
  • 撰写请求等下面

Compose your POST like this

然后,您可以检查上的窗格留下了什么是服务器响应代码。双击该行(忽略的截图错误代码......你应该得到一个415)

Double click the line with your request

后双击响应行,你可以检查和浏览右侧的详细信息窗格:

You can check the request and response details

如果你能successfuly与«制造»JSON对象后,那么问题存在于你的角码。如果没有,那么Rest服务配置肯定有问题。

您还可以检查使用Fiddler2中的Angular应用程序制作的POSTS的细节。这应该让你对发生的事情有一个很好的认识。

如果您深入了解,则可以使用Angular应用程序请求的某些屏幕截图更新您的问题。这肯定会帮助我们帮助你:)

+0

不幸的是使用js对象(没有“”)也不能正常工作... – nicost

+0

我编辑了我的答案。你能尝试我的建议吗? –

+0

嗨安东尼奥 - 就像在短版本的方法,这个“更明确”的版本结果相同: POST http:// localhost:8080/service/v1/saveWork 415(不支持的媒体类型) – nicost

相关问题