Jersey 我可以同时使用@Post和@Get吗

Jersey 我可以同时使用@Post和@Get吗,jersey,tomcat7,Jersey,Tomcat7,我想在相同的方法上同时使用@Post和@Get @GET @POST @Path("{mode}") public void paymentFinish(@PathParam("mode") String mode, String s) { logger.debug("Enter PayStatus POST"); logger.debug(mode); } 即使我这样写,我也会出错。我想要的是无论得到什么或发布到sameurl,都是同样的方法。可能吗?现在我将两种方法分开,一

我想在相同的方法上同时使用@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。

不幸的是,为了避免Jersey异常,应该只使用一种方法。 但你可以这样做:

@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);
}
通过这样做,如果您想更改函数的内部行为,您只需更改一个函数


请注意,get和post在java中的方法名称需要不同。

在搜索了大量试图避免上述解决方案后,我什么也没找到

然后我决定创建一个自定义注释,这样就不必浪费时间复制方法

以下是github链接:

它允许您通过从单个注释生成一个新类,在单个注释上创建GET和Post方法

我希望它能像帮助我一样帮助你:)

编辑: 如果由于某种原因上述链接停止工作,我会这样做:

  • 为类方法创建了编译时注释@RestMethod
  • 为类创建了编译时注释@RestClass
  • 创建一个AnnotationProcessor,该处理器生成一个带有Jersey相应注释的新类,并为每个方法创建一个GET和一个POST方法,该方法回调到用@RestClass注释的原始方法
@RestMethod注释的所有方法必须是静态的,并且包含在用@RestClass注释的类中

示例(TestService.java): 生成类似(TestServiceImpl.java):


你有什么错误?是的,目前我正在这样使用。只有链接的答案是不受欢迎的,并且经常被删除,因为当链接更改时它们变得无用。@dan neely我理解,我编辑了我的帖子来解释我当时做了什么,以防有人想重新实现它。如果出于某种原因我删除了回购协议。
@RestClass(path = "/wsdl")
public class TestService
{

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

}
@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();
    }
}