2014-04-21 79 views
1

JAX-RS中是否有任何方法或註釋允許我在匹配的請求方法執行之前或之後調用方法。讓我們假設我有以下服務類:在JAX-RS中每個@POST或@DELETE請求之前或之後調用方法

public class MyService { 

    ... 

    @POST 
    @Path("{id : \\d+}") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response updateServiceObject(@PathParam("id") long id, InputStream is) { 
     try { 
      // Fetch the service object ... 
      ServiceObject updatedServiceObj = readServiceObject(is); 

      // ... and try to update it. 
      updated = getServiceObjectDao().update(updatedServiceObj); 

      if (updated == 0) { 
       throw new WebApplicationException(Response.Status.NOT_FOUND); 
      } 

      return Response.ok().build(); 
     } catch (Exception e) { 
      throw new WebApplicationException(Response.Status.BAD_REQUEST); 
     } 
    } 

    @DELETE 
    @Path("{id : \\d+}") 
    public Response deleteServiceObject(@PathParam("id") long id) { 
     try { 
      getServiceObjectDao().deleteById(id); 
     } catch (Exception e) { 
      throw new WebApplicationException(Response.Status.BAD_REQUEST); 
     } 

     return Response.ok().build(); 
    } 
} 

我想補充的方法logEvent(),該方法被調用,並已提供了參數(只是@PathParam值)的日誌。所以它必須在每次通話之前或之後被調用。

+0

你可以有過濾器或攔截器。還有一些框架已經構建支持日誌記錄。你的框架是什麼? – Sikorski

+0

我正在使用Apache CXF。 – Phidelux

+0

您使用的是什麼版本的JAX-RS? –

回答

-1

使用面向方面編程(AOP)

+0

什麼是AOP?你能解釋一下還是可以給出與此相關的鏈接 –

0

這聽起來像一個完美契合方面或過濾器。過濾器是HTTP方面。

0

將此添加到您的cxf xml中。

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:cxf="http://cxf.apache.org/core" 
     xsi:schemaLocation=" 
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

    <cxf:bus> 
     <cxf:features> 
      <cxf:logging/> 
     </cxf:features> 
    </cxf:bus> 
</beans> 

編號:http://cxf.apache.org/docs/configuration.html

相關問題