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

Jersey 1.x迁移至2.X:JSON反序列化代码适配方案咨询

Jersey 1.X 迁移至 2.X:JSON反序列化代码修改方案

核心变化说明

Jersey 2.X 已废弃 1.X 中自定义的 JSONJAXBContext、JSONUnmarshaller 等JSON-JAXB集成类,转而依赖标准的JSON处理库(推荐Jackson,也是Jersey 2.X生态中最常用的JSON Provider)。

步骤1:更新依赖

如果使用Maven,替换原Jersey 1.X的JSON依赖为Jackson集成包:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>你的Jersey 2.X版本号(如2.41)</version>
</dependency>

步骤2:修改反序列化代码

替换原代码为基于Jackson ObjectMapper 的实现,若需兼容原JAXB注解(如@XmlRootElement、@XmlElement),可注册Jackson的JAXB注解模块以保持原有序列化/反序列化行为:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

public static Filter buildFilter(String s) throws Exception {
    ObjectMapper objectMapper = new ObjectMapper();
    // 若原代码依赖JAXB注解,添加此模块确保行为一致
    objectMapper.registerModule(new JaxbAnnotationModule());
    
    FilterModel model = objectMapper.readValue(s, FilterModel.class);
    return model.build();
}

替代方案:使用MOXy(Jersey 2.X默认JSON Provider)

若偏好使用Jersey默认的MOXy实现,可直接使用JAXB标准的Unmarshaller配合MOXy配置,模拟原代码的natural JSON格式:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import java.util.HashMap;
import java.util.Map;
import java.io.StringReader;

public static Filter buildFilter(String s) throws Exception {
    // 配置MOXy使用无根节点的自然JSON格式(对应原JSONConfiguration.natural())
    Map<String, Object> properties = new HashMap<>();
    properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
    properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
    
    JAXBContext context = JAXBContext.newInstance(new Class[]{FilterModel.class}, properties);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    
    FilterModel model = (FilterModel) unmarshaller.unmarshal(new StringReader(s));
    return model.build();
}

此方案需确保MOXy依赖存在(Jersey 2.X默认包含,若缺失可手动添加org.glassfish.jersey.media:jersey-media-moxy)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:45:35