10

@Post と @Get の両方を同じメソッドで使用したいと思います

@GET
@POST
@Path("{mode}")
public void paymentFinish(@PathParam("mode") String mode, String s) {
    logger.debug("Enter PayStatus POST");
    logger.debug(mode);
}

このように書いてもエラーになりました。私が欲しいのは、sameurlに取得または投稿するものであり、同じメソッドが機能します。出来ますか?ここで、get 用と post 用の 2 つのメソッドを分離します。

4

2 に答える 2

14

残念ながら、Jersey 例外を回避するには、1 つだけを使用する必要があります。しかし、次のようなことができます:

@GET
@Path("{mode}")
public void paymentFinish(@PathParam("mode") String mode, String s) {
    commonFunction(mode);
}

@POST
@Path("{mode}")
public void paymentFinishPOST(@PathParam("mode") String mode, String s) {
    commonFunction(mode);
}

private void commonFunction(String mode)
{
    logger.debug("Enter PayStatus POST");
    logger.debug(mode);
}

そうすることで、関数の内部動作を変更したい場合でも、1 つの関数を変更するだけで済みます。

get と post の Java のメソッド名は異なる必要があることに注意してください。

于 2013-06-27T15:48:28.097 に答える
1

上記の解決策を回避しようとして多くを検索した後、何も見つかりませんでした....

次に、メソッドを複製して時間を無駄にする必要がないように、カスタム アノテーションを作成することにしました。

github リンクは次のとおりです: Jersey-Gest

単一の注釈から新しいクラスを生成することにより、単一の注釈に GET およびポスト メソッドを作成できます。

私はそれが私を助けたのと同じようにあなたを助けることを願っています:)

編集:

何らかの理由で上記のリンクが機能しなくなった場合は、次のことを行いました。

  • クラス メソッドのコンパイル時アノテーション@RestMethodを作成しました。
  • クラスのコンパイル時アノテーション@RestClassを作成しました。
  • Jersey の対応するアノテーションを使用して新しいクラスを生成する AnnotationProcessor を作成し、メソッドごとに、 @RestClass でアノテーションを付けた元のメソッドにコールバックするGETおよび POST メソッドを作成ます

@RestMethodでアノテーションが付けられたすべてのメソッドは静的であり、 @RestClassでアノテーションが付けられたクラス内に含まれている必要があります

例 (TestService.java):

@RestClass(path = "/wsdl")
public class TestService
{

    @RestMethod(path = "/helloGest")
    public static String helloGest()
    {
        return "Hello Gest!";
    }

}

(TestServiceImpl.java) のようなものを生成します。

@Path("/wsdl")
@Produces("application/xml")
public class TestServiceImpl
{
    @GET
    @Path("/helloGest")
    @Produces(MediaType.APPLICATION_XML)
    public String helloGestGet()
    {
        return TestService.helloGest();
    }

    @POST
    @Path("/helloGest")
    @Consumes(MediaType.WILDCARD)
    @Produces(MediaType.APPLICATION_XML)
    public String helloGestPost()
    {
        return TestService.helloGest();
    }
}
于 2014-07-04T03:04:03.723 に答える