REST Webサービスでcreateメソッドを編集しようとしているので、オブジェクトから新しく作成されたIDが返されます。私は過去2日間努力してきましたが、ひどく間違ったことをしているに違いありません...
これは、サーバー側で編集されたcreateメソッドです。
@POST
@Consumes({"application/xml", "application/json"})
@Path("withID")
@Produces("text/plain")
public String create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
System.out.println("new id: " + entity.getId());
return String.valueOf(entity.getId());
}
これは、以下に示すように、(netbeansによって)生成されたcount()メソッドに基づいています。
@GET
@Path("count")
@Produces("text/plain")
public String countREST() {
return String.valueOf(super.count());
}
クライアントから新しいUsersオブジェクトを追加するように要求すると、期待どおりに機能します。新しいユーザーがデータベースに追加されています。GlassFishサーバーログに、System.out.printlnコマンドによって示される新しく作成されたIDが表示されます。ただし、NetBeansでTestRestful Webサービスを介してテストを実行し、クライアントが生成したXMLコードを正しいウィンドウに貼り付けて、[テスト]ボタンを押すと、HTTPステータス415-サポートされていないメディアタイプエラーが表示されます。
私はいくつかの調査を行い、この質問を見つけました。したがって、文字列を返す代わりに、201 CREATEDステータスのResponseオブジェクトを返し、ヘッダーなどを調整する必要がありますか?springの例を確認しましたが、springを使用していないため、create2メソッドコードを調整する方法がわかりません...ただし、試してみましたが、いくつかの部分が欠落しています。
@POST
@Consumes({"application/xml", "application/json"})
@Path("withID")
@Produces("text/plain") //should this change to application/xml?
public Response create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
System.out.println("new id: " + entity.getId());
//Response response = Response.created(... + "withID/" + entity.getId()); //response need an URI, can I get this through the entity object?
return Response.status(200).entity(entity.getId().toString()).build();
}
私は正しい方向に進んでいることを願っています。長い投稿で申し訳ありませんが、誰かがここで私を助けてくれることを願っています。前もって感謝します!
編集:今すぐ作業例:
@POST
@Consumes({"application/xml"})
@Path("withID")
@Produces({"application/xml"})
public Response create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
return Response.status(201).entity(entity.getId().toString()).build();
}