我想在@Post和@Get上使用同样的方法,比如
@GET
@POST
@Path("{mode}")
public void paymentFinish(@PathParam("mode") String mode, String s) {
logger.debug("Enter PayStatus POST");
logger.debug(mode);
}
即使我这样写,也有错误。我想要的是无论是获取还是发布到同一个方法,相同的方法都有效。可能吗?现在我将两个方法分开,一个用于get,另一个用于post。
答案 0 :(得分:11)
不幸的是,只应使用一个以避免泽西异常。 但你可以这样做:
@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);
}
通过这样做,如果你想改变你的功能的内在行为,你只需要改变一个功能。
请注意,java for get vs post中的方法名称必须不同。
答案 1 :(得分:1)
在搜索了很多试图避免上述解决方案之后,我什么都没发现......
然后我决定创建一个自定义注释,这样我就不必浪费时间重复方法了。
这是github链接:Jersey-Gest
它允许您通过从中生成新类来在单个Annotation上创建GET和Post方法。
我希望它能帮助你,就像它帮助我一样:)
如果由于某种原因上述链接停止工作,我就是这样做的:
所有使用 @RestMethod 注释的方法必须是静态的,并且包含在使用 @RestClass 注释的类中。
@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();
}
}