【问题标题】:Upgrading from jersey 1.19.4 to 2.29 for Java11从 jersey 1.19.4 升级到 Java11 的 2.29
【发布时间】:2021-04-29 02:17:49
【问题描述】:

在 Jersey 升级期间,支持 Java11 的 Jersey 2.29 不支持来自 com.sun.jersey 的大量 api。以下 API 的替代品应该是什么?

ServletHolder sh = new ServletHolder(ServletContainer.class);
            sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
            "com.sun.jersey.api.core.PackagesResourceConfig");
            sh.setInitParameter(PackagesResourceConfig.PROPERTY_PACKAGES,
                    String.format("%s;%s", ThrowableMapper.class.getPackage().getName(), packageName));
            sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", Boolean.TRUE.toString());
ServletContextHandler context = new ServletContextHandler();
            if (contextPath.indexOf("/") == 0) {
                contextPath = contextPath.substring(1);
            }
            context.setContextPath(String.format("/api/mid/%s", contextPath));
            context.addServlet(sh, "/*");

【问题讨论】:

标签: jersey-2.0 java-11 jersey-1.0


【解决方案1】:
("com.sun.jersey.api.json.POJOMappingFeature", Boolean.TRUE.toString()); 

用于提供POJO Support,而在 2.x 中,Jersey 几乎没有像 JSON Binding 这样的自动发现功能,我们只需在 pom 中添加依赖项,以便将它们加载到类路径中。

("com.sun.jersey.config.property.resourceConfigClass","com.sun.jersey.api.core.PackagesResourceConfig")    

用于创建resourceConfigClass 的实例。尽管在forums 中很少有人提到,即使它没有被实例化,它也会动态创建一个实例来添加资源。现在在 2.x 中,如果使用 ServerProperties.PROVIDER_PACKAGES 则 ServletContainer 的 source code 也确认相同,因此我们不需要单独实例化 resourceConfigClass。所以,这个参数很容易去掉。

(PackagesResourceConfig.PROPERTY_PACKAGES,
                String.format("%s;%s", ThrowableMapper.class.getPackage().getName(), packageName));    

ServerProperties.PROVIDER_PACKAGES 应该用于上述代码,而不是 PackagesResourceConfig.PROPERTY_PACKAGES。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多