0

私はかなり興味深い発音エラーに遭遇しました:

「許可されるJAX-RSエンティティパラメータは1つだけです(他のすべてのパラメータには、JAX-RSリソースパラメータアノテーションの1つでアノテーションを付ける必要があります)。」

私はenunciateを使用して、XMLとJSONをサポートするSOAPとRESTAPIの両方を構築しています。Enunciateは、すべてのservice。*およびservice.impl。*クラスを使用するように構成されています。各サービスには、enunciateドキュメント用のすべてのJavadocと、[@ GET @POST@PUT@DELETE]および@Pathアノテーションが含まれています。各サービスimplには、クラス@Pathアノテーションが含まれています。

インターフェースの例:

public interface myService {

  @GET
  @Path("/something")
  Object doGetAll();

  @GET
  @Path("/something/{id}"
  Object doGetOne(@PathParam("id") Integer id);

  @PUT
  @Path("/something")
  Object doCreate(/*params*/);

  @POST
  @Path("/something/{id}")
  Object doUpdate(@PathParam("id") Integer id, /*params*/);

  @DELETE
  @Path("/something/{id}")
  Object doDelete(@PathParam("id") Integer id);
}

実装例:

@Path("/base")
public class myServiceImpl implements myService {

  Object doGetAll() {/*stuff*/}

  Object doGetOne(Integer id) {/*stuff*/}

  Object doCreate(/*params*/) {/*stuff*/}

  Object doUpdate(Integer id, /*params*/) {/*stuff*/}

  Object doDelete(Integer id) {/*stuff*/}
}

サービスの「@POST」および「@PUT」アノテーションをコメントアウトすると、enunciateは正常に実行されます。ただし、どちらかにコメントを戻すと、上記のメッセージで発音できなくなります。キャッチは、2〜8の異なるモデルを含むサービスがあることです(例:私のaddressServiceには、アドレス、州、国の3つのオブジェクトが組み込まれています)。そのため、パスコンテキスト(アドレスを使用)を次のように指定しました。

implで:

@Path("/address")
public class myAddressServiceImpl implements myAddressService {}

メソッドについて:

@GET
@Path("/{id}")
findAddressById();

@GET
@Path("/states/{id}")
findStateById();

@GET
@Path("/countries/{id}")
findCountryById();

もっと情報を提供できれば幸いです。これはかなり苛立たしい問題でした。なぜなら、enunciateを正しく構成していないか(疑わしい、基本的な構成であるか)、またはJAX-RSで何ができるかを拡張しているのかどうかわからないからです。チュートリアルを読んだり、グーグルを使ったり、Javadoc(enunciateおよびJAX-RS用)を見たりするのにかなりの時間を費やしましたが、あまり運がありませんでした。

他の誰かがこの問題を見たことがありますか?それを修正するために私が何をする可能性があるかについて何か考えはありますか?私はこれがそれらの「当たり前の」修正の1つになるだろうと感じています...ただそれに指を置くことができません。

助けてくれてありがとう。

4

1 に答える 1

4

「エンティティパラメータ」は、RESTリクエストの本文で指定されるパラメータです。つまり、リクエストの本文が読み取られ、それをパラメータタイプのオブジェクトに逆シリアル化しようと試みられた後、リクエストが呼び出されます。

ボディは1つしか存在できないため、エンティティパラメータは1つしか存在できません。

他のパラメータには、@ QueryParameter、@PathParameterなどの注釈を付ける必要があります。

したがって、このエラーメッセージが実際に伝えようとしているのは、「@ POSTおよび@PUTでアノテーションが付けられているすべてのメソッドについて、アノテーションが付けられていないパラメーターは1つだけです。他のすべてのパラメーターにはパラメーターアノテーションが必要です。」

于 2011-03-01T21:46:31.863 に答える