オークション機能を備えたアプリケーションを設計しています。フロントエンドはAngularjsで、バックエンドはGlassfish 4のJAX-RSを使用します。DELETEへの配列を含む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モデルは次のようになります。AuctionWatchlistEntryモデルに
@XmlRootElement
public class DeleteAuctionWatchlistsContainer {
private AuctionWatchlistEntry[] auctionWatchlistDeleteEntries;
public DeleteAuctionWatchlistsContainer() {
}
public AuctionWatchlistEntry[] getAuctionWatchlistDeleteEntries() {
return auctionWatchlistDeleteEntries;
}
}
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;
})
};
感謝すべてのヘルプ。関連するものを除外した場合はお知らせください。
jsonbアノテーションをjsonにマップするためにjacksonを使用していますか? jsonプロバイダを登録しましたか?なぜDeleteAuctionWatchlistsContainerにXmlRootElementアノテーションがありませんか?サーバーログとは何ですか? – pedrofb
私はXmlRootElementにDeleteAuctionWatchlistContainerを追加しました。これは良い点でした。しかし、エラーは同じままです。 @DELETEメソッドを含むリソースには@Consumes(MediaType.APPLICATION_JSON)があります。サーバーログに何も報告されていません。私はいくつかのSystem.out.printlnをprintメソッドの中に持っていますが、Containerオブジェクトにアクセスしようとすると何もしません。 –