You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Payara5搭配RestEasy6.0.1默认用Yasson,如何强制切换为Jackson?

RestEasy序列化提供者选择逻辑及Payara 5下强制使用Jackson的方案

RestEasy 序列化提供者的选择逻辑

  • RestEasy 3.x-5.x:基于Java EE 8及更早版本,默认优先识别并使用Jackson作为JSON序列化提供者——这是因为当时Jackson是生态中最主流的实现,且RestEasy默认依赖resteasy-jackson2-provider,会自动注册Jackson的Provider。
  • RestEasy 6.x:基于Jakarta EE 9+规范,该规范将**JSON-B(JSR-367)**设为默认的JSON绑定标准,Yasson是官方推荐的JSON-B实现。此时RestEasy的自动发现机制会优先检测容器中是否存在JSON-B实现(Payara 5自带Yasson),如果存在就会优先使用Yasson而非Jackson。
  • 你之前配置的jersey.config.jsonFeature是Jersey框架的专属参数,RestEasy并不识别该配置,所以不会生效——这就是添加配置后问题仍存在的核心原因。

Payara 5 + RestEasy 6.0.1 强制使用Jackson的步骤

  1. 确保引入正确的Jackson依赖
    在项目的pom.xml(Maven)中明确添加RestEasy的Jackson提供者依赖,并排除可能冲突的JSON-B相关依赖:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>6.0.1</version>
        <exclusions>
            <exclusion>
                <groupId>jakarta.json.bind</groupId>
                <artifactId>jakarta.json.bind-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse</groupId>
                <artifactId>yasson</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 禁用RestEasy的JSON-B自动注册
    在web.xml中添加RestEasy专属的上下文参数,关闭JSON-B的自动发现:

    <context-param>
        <param-name>resteasy.disable.jsonb</param-name>
        <param-value>true</param-value>
    </context-param>
    
  3. 手动注册Jackson Provider
    如果上述配置仍不生效,可在你的JAX-RS应用类中手动注册Jackson的Provider:

    import org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider;
    import jakarta.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;
    
    public class YourRestApplication extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<>();
            // 注册Jackson序列化提供者
            classes.add(ResteasyJackson2Provider.class);
            // 添加你的业务资源类
            classes.add(YourApiResource.class);
            return classes;
        }
    }
    
  4. 调整Payara类加载顺序(可选)
    如果Payara容器自带的Yasson仍存在干扰,可在WEB-INF/glassfish-web.xml中配置类加载优先级,让项目自带的Jackson优先加载:

    <glassfish-web-app>
        <class-loader delegate="false"/>
    </glassfish-web-app>
    

    注意:将delegate设为false会让项目优先加载自身依赖,可能引发其他容器依赖的兼容性问题,需测试验证后再使用。

内容的提问来源于stack exchange,提问作者chrisl08

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:09:26