Rest Apache CXF JAX-RS中的动词组合

Rest Apache CXF JAX-RS中的动词组合,rest,jax-rs,cxf,cxfrs,Rest,Jax Rs,Cxf,Cxfrs,我们通常将POST和PUT动词定义为不同的服务API @POST @Path("/getbook") @Produces({"application/xml","application/json"}) @Consumes({"application/xml","application/json","application/x-www-form-urlencoded"}) public Response getBucket() { ... } @PUT @Path("/getboo

我们通常将POST和PUT动词定义为不同的服务API

@POST
@Path("/getbook")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json","application/x-www-form-urlencoded"})
public Response getBucket() {
...        } 
@PUT
@Path("/getbook/{name}")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json","application/x-www-form-urlencoded"})
public Response getBucket(@PathParam("name") String name) {
...        }
有没有办法将这些动词组合成一个方法,然后根据动词的类型驱动不同的逻辑? 假设

@POST 
@PUT
@Path("/getbook/{name}")
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json","application/x-www-form-urlencoded"})
public Response getBucket(@PathParam("name") String name) {

if(verb=POST){
...        }
else{

}
}

您可以使用
MessageContext
这样做。对于
updateCustomer
方法,您需要将上下文注入服务方法,如下所示,然后您可以根据需要检查方法类型(这里我检查PUT):

@Path("/customer")
public class CustomerService {

    @Context
    private org.apache.cxf.jaxrs.ext.MessageContext mc; 

    @PUT
    public Response updateCustomer(@Context MessageContext context, Customer c) {
        HttpServletRequest request = context.getHttpServletRequest();

        boolean isPut = "PUT".equals(request.getMethod());
    }
}