Есть ли какой-либо метод или аннотация в JAX-RS, который позволяет мне вызвать метод до или после выполнения метода запроса соответствия. Предположим, что у меня есть следующий класс обслуживания:
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) были предоставлены. Таким образом, его нужно вызывать до или после каждого вызова.
На этой странице https://cxf.apache.org/docs/jax-rs-filters.html объясняется, как реализовать перехватчики и фильтры для CXF с JAX-RS.
Добавьте это в свой xx xx.
<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.
использовать Apect Oriented Programming (AOP)