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

如何检查JEE8应用使用的JSON序列化提供程序(Payara4/5环境)

记录JEE8应用的JSON序列化提供程序及验证配置有效性

方法1:通过CDI注入Jsonb实例获取实现类

JEE8原生支持JSON-B API,直接注入Jsonb实例后,打印其实际实现类名称即可明确当前使用的JSON-B提供程序。

import javax.inject.Inject;
import javax.json.bind.Jsonb;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class JsonProviderDetector implements ServletContextListener {

    @Inject
    private Jsonb jsonb;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        if (jsonb != null) {
            String providerName = jsonb.getClass().getName();
            System.out.println("当前JSON-B序列化提供程序: " + providerName);
            // Payara 5默认输出org.eclipse.yasson.JsonbImpl,Payara 4默认输出org.eclipse.persistence.jaxb.jsonb.JsonbImpl
            // 若配置Jackson JSON-B实现,会输出com.fasterxml.jackson.module.jsonb.JsonbImpl
        }
    }
}

部署后查看Payara服务器日志(路径为domain/logs/server.log),即可看到对应提供程序名称。

方法2:通过JAX-RS获取MessageBodyWriter实现类

如果应用用JAX-RS处理JSON,可获取MessageBodyWriter的实际实现类,判断使用的是Moxy、Jackson还是其他提供程序:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.ext.MessageBodyWriter;
import java.util.Set;

public class JsonProviderChecker {
    public static void detectProvider() {
        Client client = ClientBuilder.newClient();
        Set<MessageBodyWriter<?>> writers = client.getConfiguration().getInstances(MessageBodyWriter.class);
        
        for (MessageBodyWriter<?> writer : writers) {
            String writerClass = writer.getClass().getName();
            if (writerClass.contains("eclipse.persistence") || writerClass.contains("moxy")) {
                System.out.println("当前JAX-RS JSON序列化使用Moxy: " + writerClass);
            } else if (writerClass.contains("jackson")) {
                System.out.println("当前JAX-RS JSON序列化使用Jackson: " + writerClass);
            } else if (writerClass.contains("jsonb")) {
                System.out.println("当前JAX-RS JSON序列化使用JSON-B实现: " + writerClass);
            }
        }
        client.close();
    }
}

将这段代码放在启动类、Servlet或EJB中执行,输出结果会直接打印到日志。

方法3:结合配置文件验证自定义配置

Payara默认配置参考

  • Payara 4默认用Moxy作为JAX-RS JSON提供程序,JSON-B默认实现为EclipseLink Moxy的适配版本
  • Payara 5默认用Yasson(Eclipse官方JSON-B参考实现)作为JSON-B提供程序,JAX-RS仍支持Moxy或Jackson切换

验证配置生效

若你通过web.xml、beans.xml或Payara专属的glassfish-web.xml指定了JSON提供程序(比如强制用Jackson):

<!-- web.xml中配置JAX-RS使用Jackson -->
<context-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider</param-value>
</context-param>

可结合前面的代码方法,检查输出的实现类是否符合预期,以此确认配置生效。

方法4:通过Payara管理控制台查看

  1. 登录Payara管理控制台(默认端口4848)
  2. 进入Applications -> 选中你的应用 -> Details -> Classes and Resources
  3. 查看类加载器中的JSON相关类,比如org.eclipse.yasson.JsonbImpl(Yasson)、com.fasterxml.jackson.databind.ObjectMapper(Jackson)、org.eclipse.persistence.jaxb.JAXBContext(Moxy),以此判断当前生效的提供程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:55:10