我正在设计一个具有拍卖功能的应用程序。前端位于Angularjs,后端使用Glassfish 4上的JAX-RS。
我有一种情况,我想删除用户正在观看的一些拍卖。我将一个容器对象发送到服务器,该服务器包含一个数组,告诉我希望为该用户删除哪些拍卖。
但是,当我发送该对象时,服务器会抛出错误。它显然不喜欢它如何接收对象 - 似乎没有正确地从json转换到JAVA对象。
这是在从angularJS前端发送它之前将对象打印到控制台时的样子:
deleteAuctionWatchlistContainer = {"auctionWatchlistDeleteEntries":[{"auction_id":356,"user_id":2},{"auction_id":225,"user_id":2}]}
这是返回的错误。正如您在config中看到的那样,返回数组,而不是包含它的对象。
Error trying to delete the auction watchlist entries:
{"data":{"errorCode":500},"status":500,"config":
{"method":"DELETE","transformRequest":[null],"transformResponse":[null],
"auctionWatchlistDeleteEntries":[{"auction_id":356,"user_id":2},{"auction_id":225,"user_id":2}],
"url":"http://localhost:8080/pododdle/webapi/users/2/auctionwatchlist",
"headers":{"Accept":"application/json, text/plain, */*"}},
"statusText":"Internal Server Error"}
我之前使用过容器对象来做这种事情,但是这次看不出为什么它不起作用。我可以看到资源被正确调用,但是一旦资源试图将json转换为java对象,它就会抛出错误。
容器的JAVA模型如下所示:
@XmlRootElement
public class DeleteAuctionWatchlistsContainer {
private AuctionWatchlistEntry[] auctionWatchlistDeleteEntries;
public DeleteAuctionWatchlistsContainer() {
}
public AuctionWatchlistEntry[] getAuctionWatchlistDeleteEntries() {
return auctionWatchlistDeleteEntries;
}
}
AuctionWatchlistEntry模型的Java是:
@XmlRootElement
public class AuctionWatchlistEntry {
private int auction_id;
private int user_id;
public AuctionWatchlistEntry() {
}
public int getAuction_id() {
return auction_id;
}
public int getUser_id() {
return user_id;
}
}
以下是拍卖监视列表删除的JAX-RS资源:
@DELETE
public Response deleteAuctionWatchlists(DeleteAuctionWatchlistsContainer dAWC)
{
return Response.ok(auctionWatchlistService.deleteAuctionWatchlistEntries(dAWC.getAuctionWatchlistDeleteEntries()).toString()).build();
}
将对象发送到服务器的angularjs方法保存在angularjs服务中。这是我们称之为服务方法的地方:
var deleteAuctionWatchlistContainer = { auctionWatchlistDeleteEntries: deleteEntries };
pododdle.deleteAuctionWatchlistEntries(deleteAuctionWatchlistContainer).then(onDeleteAuctionWatchlistEntriesComplete, onDeleteAuctionWatchlistEntriesError);
以下是服务方法代码:
var deleteAuctionWatchlistEntries = function(deleteAuctionWatchlistContainer) {
return $http.delete("http://localhost:8080/pododdle/webapi/users/" + currentUser.user_id + "/auctionwatchlist", deleteAuctionWatchlistContainer)
.then(function(response) {
return response.data;
})
};
所有人都非常感谢。如果我遗漏了任何相关信息,请告诉我。
答案 0 :(得分:0)
问题是由@DELETE不接受实体引起的。为了解决这个问题,我使用了一个查询参数,其中包含了我想为特定用途删除的auction_id的分隔字符串。
我确实知道这是否太多了,但是它运行正常并且符合用户期望的行为。