2017-01-30 11 views
0

オークション機能を備えたアプリケーションを設計しています。フロントエンドは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; 
    })   
}; 

感謝すべてのヘルプ。関連するものを除外した場合はお知らせください。

+1

jsonbアノテーションをjsonにマップするためにjacksonを使用していますか? jsonプロバイダを登録しましたか?なぜDeleteAuctionWatchlistsContainerにXmlRootElementアノテーションがありませんか?サーバーログとは何ですか? – pedrofb

+0

私はXmlRootElementにDeleteAuctionWatchlistContainerを追加しました。これは良い点でした。しかし、エラーは同じままです。 @DELETEメソッドを含むリソースには@Consumes(MediaType.APPLICATION_JSON)があります。サーバーログに何も報告されていません。私はいくつかのSystem.out.printlnをprintメソッドの中に持っていますが、Containerオブジェクトにアクセスしようとすると何もしません。 –

答えて

0

問題は、@ DELETEがエンティティを受け入れないために発生しました。この問題を回避するために、特定の用途のために削除したいauction_idの区切り文字列を含むクエリパラメータを使用しました。

これがあまりにも多くのハックであるかどうかはわかりますが、うまく動作し、ユーザーの希望する動作に適しています。

関連する問題