2015-07-12 69 views
0

我们通常将POST和PUT动词定义为不同的服务API。在Apache CXF中结合动词JAX-RS

@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{ 

} 
} 

回答

0

您可以尝试像这样使用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()); 
    } 
} 
+0

你得到这个工作? – Garry