我正在使用Google Guice和Jersey(jax-rs)。如果我调用它,则以下方法抛出JAXB-Exception(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();
或者我只需要使用实现吗?
答案 0 :(得分:2)
您需要使用具体的课程。 Guice不在这里。用户实例由Jersey使用JAXB创建。 Guice(或任何其他DI框架)无法做到。您还应该删除UserTO的绑定。一般来说,我认为让DI框架管理代表数据的对象并不是一个好主意。