2

我确实有以下配置作为 Guice 模块(而不是 web.xml)

public class RestModule extends JerseyServletModule {
@Override
protected void configureServlets() {
    install(new JpaPersistModule("myDB"));
    filter("/*").through(PersistFilter.class);

    bind(CustomerList.class);
    bind(OrdersList.class);

    bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
    bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);

    ImmutableMap<String, String> settings = ImmutableMap.of(
            JSONConfiguration.FEATURE_POJO_MAPPING, "true"
            );

    serve("/*").with(GuiceContainer.class, settings);
}
}

为 REST 端点提供服务已经非常有效了。

当用户请求http://example.com/时,我想从 /webapp/index.html 提供一个静态 html 文件

其余服务位于http://example.com/customershttp://example.com/orders

我不使用 web.xml。网络服务器是码头

4

2 回答 2

2

请参阅:Jersey /* servlet 映射导致静态资源出现 404 错误 并将适当的参数添加到您的settings对象。就像是:

ImmutableMap<String, String> settings = ImmutableMap.of(
  JSONConfiguration.FEATURE_POJO_MAPPING, "true"
  "com.sun.jersey.config.property.WebPageContentRegex", "/.*html");
于 2013-03-17T22:16:56.293 回答
2

正如我在评论中所说,我几乎整天都在为此苦苦挣扎。condit 链接到正确答案,但为了完整起见,这对我有用。我正在使用 Tomcat、jersey(和 jersey-guice)1.17.1 和 guice 3.0。

虽然我使用的是 Tomcat,但困难的部分(提供静态资源)应该没有那么不同。

public class JerseyConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new JerseyServletModule() {
            @Override
            protected void configureServlets() {

                // Bind  REST resources
                bind(HomeController.class);
                bind(AboutController.class);

                Map<String, String> params = new HashMap<String, String>();
                params.put("com.sun.jersey.config.property.WebPageContentRegex",
                    "/(images|css)/.*");
                filter("/*").through(GuiceContainer.class, params);
            }
        });
    }
}

注意:最后两行是最重要的。

首先,忽略静态文件的参数:

"com.sun.jersey.config.property.WebPageContentRegex" (1.7 only!!!)

我将此设置为正则表达式:

"/(images|css)/.*"

...因为我的静态资源位于 src/main/webapp/images 和 src/main/webapp/css (我使用的是 maven 项目结构)。例如:

http://localhost:8080/myapp/images/logo.png

(这仅适用于 jersey 1.7.x - 如果您使用 jersey 2.x,则应使用键“jersey.config.servlet.filter.staticContentRegex”或最好使用 Java 常量 ServletProperties.FILTER_STATIC_CONTENT_REGEX)。

最后,最后一行:

filter("/*").through(GuiceContainer.class, params);

您应该使用: filter("/*").through 和 NOT serve("/*).with

如果你想出一个不同的解决方案,我想看看它是什么。

于 2013-05-05T23:57:05.863 回答