创建一个接受POST和GET的Jax-RS RESTful服务?

时间:2012-11-15 23:28:49

标签: rest java-ee jersey jax-rs resteasy

我正在将我现有的一项服务转换成RESTful,并且我已经掌握了RestEasy的基本功能。我的一些客户端应用程序应该能够对多个服务执行GET和POST请求。我只是想找到一个简单的方法来解决jax-rs指定API应该同时接受GET和POST的问题。下面你可以找到一个测试方法,如果你看到任何方法而没有在@GET和@QueryParam的另一个类中复制它,请告诉我。

@POST
@Path("/add")
public Response testREST(@FormParam("paraA") String paraA,
        @FormParam("paraB")  int paraB) {

    return Response.status(200)
            .entity("Test my input : " + paraA + ", age : " + paraB)
            .build();

}

3 个答案:

答案 0 :(得分:17)

只需将方法体放在另一个方法中,并为每个HTTP动词声明一个公共方法:

@Controller
@Path("/foo-controller")
public class MyController {

    @GET
    @Path("/thing")
    public Response getStuff() {
        return doStuff();
    }

    @POST
    @Path("/thing")
    public Response postStuff() {
        return doStuff();
    }

    private Response doStuff() {
        // Do the stuff...
        return Response.status(200)
                .entity("Done")
                .build();
    }
}

答案 1 :(得分:4)

正如wikipedia所述,如果API是具有四个已定义方面的资源集合,则它是RESTful:

  • Web服务的基本URI,例如http://example.com/resources/
  • Web服务支持的数据的Internet媒体类型。这通常是XML,但可以是任何其他有效的Internet媒体类型,只要它是有效的超文本标准。
  • Web服务使用HTTP方法支持的操作集(例如,GET,PUT,POST或DELETE)。
  • API必须是超文本驱动的。

通过缩小GETPOST之间的差异,您违反了第三方面。

答案 2 :(得分:0)

如果此方案适合您的所有资源,您可以创建一个包装请求的ServletFilter,并在每次请求方法时返回Get或Post。