谷歌Guice和Jersey-JAXB可以';无法处理接口错误

谷歌Guice和Jersey-JAXB可以';无法处理接口错误,jaxb,jersey,guice,Jaxb,Jersey,Guice,我正在使用GoogleGuice和Jersey(jax-rs)。如果我调用以下方法,它将抛出一个JAXB异常(JAXB无法处理接口): @POST public void addUser(UserTO user){ } UserTO是一个接口,但在Guice中,我将其绑定到一个实现: bind(UserTO.class).to(DefaultUserTO.class); 我想Guice应该能处理这件事。但我的服务器启动可能有问题: Injector injector =

我正在使用GoogleGuice和Jersey(jax-rs)。如果我调用以下方法,它将抛出一个JAXB异常(JAXB无法处理接口):

@POST
public void addUser(UserTO user){
}
UserTO是一个接口,但在Guice中,我将其绑定到一个实现:

bind(UserTO.class).to(DefaultUserTO.class);
我想Guice应该能处理这件事。但我的服务器启动可能有问题:

    Injector injector =
      Guice.createInjector(new GuiceServerModule(),
                           new JerseyServletModule() {
              @Override
              protected void configureServlets() { 
                  // Route all requests through GuiceContainer
                  serve("/*").with(GuiceContainer.class);
              }
      });

    // Create the server.
    Server server = new Server(12345);

    // Create a servlet context and add the jersey servlet.
    ServletContextHandler sch = new ServletContextHandler(server, "/");

    // Add our Guice listener that includes our bindings 
    sch.addEventListener(new GuiceServletConfig(injector));

    // Then add GuiceFilter and configure the server to 
    // reroute all requests through this filter. 
    sch.addFilter(GuiceFilter.class, "/*", null);

    // Must add DefaultServlet for embedded Jetty. 
    // Failing to do this will cause 404 errors.
    // This is not needed if web.xml is used instead.
     sch.addServlet(DefaultServlet.class, "/");

    // Start the server
    server.start();

   // Wait until server shut down
   server.join();

或者我必须只使用一个实现吗?

您需要使用一个具体的类。Guice不在这里。Jersey使用JAXB创建用户实例。Guice(或任何其他DI框架)都无能为力。您还应该删除UserTO的绑定。一般来说,我认为让DI框架管理表示数据的对象不是一个好主意