1

文字列でも単純なタイプでもない何かを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 エラーもスローされます。

ご協力いただきありがとうございます!
ジャナ

4

1 に答える 1

0

わかった。

405エラーの原因が分かったので、この質問はクローズします。しかし、400エラーの新たに見つかったミスのために新しいものを開きます。上記のコメントで「解決策」を説明しました。

サービスを古いサーバー (POST がまったく機能せず、常に 405 がスローされた) から新しいサーバーに移動し、クライアントのサービス URL を変更しませんでした! @_@ (したがって、新しいクライアントは依然として古いサーバーに到達しようとしました)

しかし、今では文字列のリストを送信できますが、独自のクラス オブジェクト (エンティティまたは DTO) は送信できません。HTTP 400 エラー "Bad Request" が表示されるようになりました。:-( しかし、私は他に何も変更していません。非標準タイプを送信することは可能ですか?

(--> 新しい質問でそれを尋ねます。)

このばかげた間違いで申し訳ありません。
ジャナ

于 2013-09-09T07:34:55.300 に答える