【问题标题】:Force Glassfish4 to use Jackson instead of Moxy强制 Glassfish4 使用 Jackson 而不是 Moxy
【发布时间】:2025-12-06 05:25:07
【问题描述】:

Glassfish4 正在使用 Moxy 将 REST 响应序列化为 JSON。有谁知道如何配置应用程序以使用 Jackson 而不是 Moxy?

【问题讨论】:

    标签: glassfish jersey jackson moxy


    【解决方案1】:

    如果您想使用 Jackson 作为您的 JSON 提供程序,您需要在您的应用程序中注册 JacksonFeature(通过注册此功能您禁用 MOXy 作为您的 JSON 提供程序)。

    您可以在Application 子类中执行此操作:

    public class MyApplication extends Application {
    
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<Class<?>>();
    
            // Add root resources.
            classes.add(HelloWorldResource.class);
    
            // Add JacksonFeature.
            classes.add(JacksonFeature.class);
    
            return classes;
        }
    }
    

    ResourceConfig:

    final Application application = new ResourceConfig()
            .packages("org.glassfish.jersey.examples.jackson")
            .register(MyObjectMapperProvider.class)  // No need to register this provider if no special configuration is required.
            // Register JacksonFeature.
            .register(JacksonFeature.class);
    

    有关更多信息,请参阅 Jersey 用户指南中的 Jackson 部分。

    【讨论】:

    • 在哪里可以找到 Jackson 上课地点?
    • JacksonFeatureorg.glassfish.jersey.media:jersey-media-json-jakson 中。这个模块带来了 Jackson 1.9.x。如果你想使用 Jackson 2.x,只需添加对 com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider 的依赖,由于 META-INF/services 机制,它将自动启用。
    • 请参阅 this answer 以获取在 GlassFish 4 上使用 Maven 构建实现此目的的完整说明。
    【解决方案2】:

    Michal Gajdos 的回答是正确的,只是补充一点,在你的 pom.xml 中添加这个依赖,

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.26</version>
    </dependency>
    

    【讨论】:

    • 我还将它添加到 pom.xml 并启动 glassfish 4.1。它仍然保持杰克逊版本 2.3.2(glassfish 的默认值)