У меня есть проект Dropwizard, у которого есть ресурсы на основе сгенерированных Java интерфейсов. Ресурс выглядит следующим образом:
@Path("/foo")
public class FooResource implements FooApi {
@Override // This method overrides the one from FooApi interface
public Response fooGet() {
...
}
}
FooApi - это интерфейс, который был сгенерирован из контракта OpenAPI:
@Path("/foo")
@Api(description = "Will list foos.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen", date = "2077-10-23T19:04:20.922+03:00[Europe/Kiev]")
public interface FooApi {
@GET
@Produces({ "application/json" })
@ApiOperation(value = "Will list foos.", notes = "Will list foos.", tags={ "Foo" })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK", response = Foo.class, responseContainer = "List") })
Response fooGet();
}
Так что теперь я пытаюсь интегрировать этот ресурс с метриками Джерси с помощью аннотированных методов с @Timed или @Metered, например
@Timed
@Override // This method overrides the one from FooApi interface
public Response fooGet() {
...
}
Но в этом случае НИКАКИЕ метрики не будут получены.
Я также попытался аннотировать класс:
@Timed
@Path("/foo")
public class FooResource implements FooApi {
И на этот раз я вижу, что метрики были созданы, но они слишком обобщенные c для меня.
Я подозреваю, что проблема связана с InstrumentedResourceMethodApplicationListener и тем, как он извлекает аннотированные методы, но, может быть, есть более простое решение, а не переопределять этот слушатель?