Java @路径注释:dropwizard中的抽象资源

Java @路径注释:dropwizard中的抽象资源,java,groovy,annotations,jetty,dropwizard,Java,Groovy,Annotations,Jetty,Dropwizard,我有一个为我的应用程序构建抽象资源类的想法: abstract class MyAbstractResource<A> { MyAbstractDao dao; public MyAbstractResource(MyAbstractDao dao) { this.dao = dao; } @Path("/") @POST @Produces(MediaType.APPLICATION_JSON) @Time

我有一个为我的应用程序构建抽象资源类的想法:

abstract class MyAbstractResource<A> {
    MyAbstractDao dao;

    public MyAbstractResource(MyAbstractDao dao) {
        this.dao = dao;
    }

    @Path("/")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    public A create(A account) {
        return dao.create(account);
    }

    @Path("/{id}")
    @PUT
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    public A update(A account) {
        return dao.change(account);
    }

    @Path("/{id}")
    @DELETE
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    public void delete(@PathParam("id") Long id) {
        dao.delete(id);
    }

    @Path("/{id}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    public A get(@PathParam("id") Long id) {
        return dao.findById(id);
    }

    @Path("/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    public List<A> getAll() {
        return dao.findAll();
    }
}
抽象类MyAbstractResource{
我的刀刀;
公共MyAbstractResource(MyAbstractDao){
this.dao=dao;
}
@路径(“/”)
@职位
@产生(MediaType.APPLICATION_JSON)
@定时
公开创建(帐户){
返回dao.create(account);
}
@路径(“/{id}”)
@放
@产生(MediaType.APPLICATION_JSON)
@定时
公开更新(帐户){
返回dao。更改(帐户);
}
@路径(“/{id}”)
@删除
@产生(MediaType.APPLICATION_JSON)
@定时
public void delete(@PathParam(“id”)Long id){
删除(id);
}
@路径(“/{id}”)
@得到
@产生(MediaType.APPLICATION_JSON)
@定时
public A get(@PathParam(“id”)Long id){
返回dao.findById(id);
}
@路径(“/”)
@得到
@产生(MediaType.APPLICATION_JSON)
@定时
公共列表getAll(){
返回dao.findAll();
}
}
以及以下实现:

@Path("/account")
class AccountResource extends MyAbstractResource<AccountDaoImpl> {
    private static final Logger LOG = LoggerFactory.getLogger(AccountResource.class)
}
@Path(“/account”)
类AccountResource扩展了MyAbstractResource{
私有静态最终记录器LOG=LoggerFactory.getLogger(AccountResource.class)
}
,但我遇到了一个无法覆盖或添加@Path注释的问题:

Exception in thread "main" javax.servlet.ServletException: org.glassfish.jersey.servlet.ServletContainer-164d01ba@41f867a3==org.glassfish.jersey.servlet.ServletContainer,1,false
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at com.codahale.metrics.jetty9.InstrumentedHandler.doStart(InstrumentedHandler.java:102)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.handler.StatisticsHandler.doStart(StatisticsHandler.java:232)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
at org.eclipse.jetty.server.Server.start(Server.java:387)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
at org.eclipse.jetty.server.Server.doStart(Server.java:354)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at io.dropwizard.cli.ServerCommand.run(ServerCommand.java:43)
at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:43)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76)
at io.dropwizard.cli.Cli.run(Cli.java:70)
at io.dropwizard.Application.run(Application.java:73)
at io.dropwizard.Application$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:122)
at com.fappilla.web.FappillaWebService.main(MyWebService.groovy:24)
Caused by: java.lang.IllegalArgumentException: duplicate key: public java.util.List com.fappilla.web.resources.AbstractFappillaResource.getAll()
at jersey.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:119)
at jersey.repackaged.com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:67)
at jersey.repackaged.com.google.common.collect.ImmutableMap$Builder.fromEntryList(ImmutableMap.java:249)
at jersey.repackaged.com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:235)
at com.codahale.metrics.jersey2.InstrumentedResourceMethodApplicationListener.onEvent(InstrumentedResourceMethodApplicationListener.java:178)
at org.glassfish.jersey.server.internal.monitoring.CompositeApplicationEventListener.onEvent(CompositeApplicationEventListener.java:74)
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:561)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:324)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:336)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)
... 40 more
线程“main”javax.servlet.ServletException中的异常:org.glassfish.jersey.servlet.ServletContainer-164d01ba@41f867a3==org.glassfish.jersey.servlet.ServletContainer,1,false 位于org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633) 位于org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395) 位于org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871) 位于org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298) 位于org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)上 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 位于com.codahale.metrics.jetty9.InstrumentedHandler.doStart(InstrumentedHandler.java:102) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)上 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)上 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 位于org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)上 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 位于org.eclipse.jetty.server.handler.StatisticsHandler.doStart(StatisticsHandler.java:232) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)上 位于org.eclipse.jetty.server.server.start(server.java:387) 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 位于org.eclipse.jetty.server.server.doStart(server.java:354) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在io.dropwizard.cli.ServerCommand.run(ServerCommand.java:43) 在io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:43) 在io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76) 在io.dropwizard.cli.cli.run(cli.java:70) 运行(Application.java:73) at io.dropwizard.Application$run.call(未知源) 位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:122) 位于com.fappilla.web.FappillaWebService.main(MyWebService.groovy:24) 原因:java.lang.IllegalArgumentException:duplicate key:public java.util.List com.fappilla.web.resources.AbstractFappillaResource.getAll() 在jersey.repackaged.com.google.common.base.premissions.checkArgument(premissions.java:119)上 在jersey.repackaged.com.google.common.collect.regulammutablemap.(regulammutablemap.java:67) 位于jersey.repackaged.com.google.common.collect.ImmutableMap$Builder.fromEntryList(ImmutableMap.java:249) 位于jersey.repackage.com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:235) 位于com.codahale.metrics.jersey2.InstrumentedResourceMethodApplicationListener.OneEvent(InstrumentedResourceMethodApplicationListener.java:178) 位于org.glassfish.jersey.server.internal.monitoring.CompositeApplicationEventListener.onEvent(CompositeApplicationEventListener.java:74) 位于org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:561) 位于org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166) 位于org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327) 在org.glassfish.jersey.internal.E