Объединение глаголов в Apache CXF JAX-RS

Обычно мы определяем глаголы 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{

}
}

person IUnknown    schedule 12.07.2015    source источник


Ответы (1)


Вы можете попробовать так, используя 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());
    }
}
person Garry    schedule 13.07.2015