文字列でも単純なタイプでもない何かをRESTサーバー(リソース)に渡すのは簡単ではないことを私は知っています。
しかし、単純な注文プロセスでは、クライアントからサーバーに (注文される) 記事のリストを送信する必要があります。
私はすでに "QueryParam" を使用して、オブジェクト (リストを DTO にラップ) を JSON-String に変換して渡してみました。うまくいきませんでした。(ただし、オブジェクトをサーバーに渡す必要のない他のメソッドの場合、私のサービスは POST メソッドでも問題なく動作します。)
そんな時、理論上あらゆるオブジェクトを転送できる @FormParam を知りました。(そう読んだのですが、本当ですか?)
そのため、非常に単純なテスト メソッドで文字列のリストをサービスに渡すことを試みました。サーバー側はそのリストの要素数を返す必要があります。
それが私のコードです:
サーバー側 (リソース):
@Path("bestellung")
public class BestellungResource {
@Path("test")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(XML)
public Integer test(
@FormParam("list") List<String> list){
return list.size();
}
}
クライアント側 (セッション Bean 内):
public Integer test() {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
Form form = new Form();
form.add("list", list);
return service
.path("bestellung")
.path("test")
.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(Integer.class, form);
}
サービスがそのように構築されている場所:
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
service = client.resource(UriBuilder.fromUri("<service url>").build());
このクライアント メソッドを GUI から呼び出すか、EJB エクスプローラーから直接呼び出すと、常に 405 エラーが発生します。
問題はどこですか?POST、MIME タイプ、またはフォームで何かを見逃していませんか?
ちなみに、String や int のような単純なフォーム パラメータでも機能せず、405 エラーもスローされます。
ご協力いただきありがとうございます!
ジャナ