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

返回XSSFWorkbook到ResponseEntity报Locale类无序列化器错误如何解决

问题原因

你遇到的报错本质是Jackson序列化框架尝试将XSSFWorkbook对象序列化为JSON时,无法找到类org.apache.xmlbeans.impl.store.Locale的序列化器。XSSFWorkbook内部嵌套了大量POI私有的实现类,这些类没有适配Jackson的序列化规则,哪怕你把它封装到自定义类里,Jackson序列化时仍然会递归处理内部属性,所以无法解决问题。

推荐解决方案

方案1:转为字节数组/Base64字符串返回(最推荐,适合后续二次处理)

这种方式序列化效率高,下游拿到后可以直接还原为XSSFWorkbook对象继续操作,代码修改如下:
首先是将XSSFWorkbook转为字节数组的工具逻辑:

// 将XSSFWorkbook转为字节数组
ByteArrayOutputStream os = new ByteArrayOutputStream();
workbook.write(os);
byte[] excelBytes = os.toByteArray();
// 如果需要字符串格式,可以转为Base64
// String base64Excel = Base64.getEncoder().encodeToString(excelBytes);

修改你的控制器方法:

@POST
@Path("/excel")
public Response getExcel() {
    try {
        XSSFWorkbook workbook = this.classname.getExcelObject();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        workbook.write(os);
        // 直接返回字节数组,也可以封装为自定义对象返回
        return Response.status(Response.Status.OK).entity(os.toByteArray()).build();
    } catch (Exception e) {
        return ExceptionHandler.error(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage());
    }
}

下游拿到字节数组后可以直接还原为XSSFWorkbook:

ByteArrayInputStream is = new ByteArrayInputStream(excelBytes);
XSSFWorkbook workbook = new XSSFWorkbook(is);

方案2:配置Jackson绕过空Bean序列化报错(不推荐)

如果必须直接返回XSSFWorkbook对象,你可以在Jackson的配置中关闭FAIL_ON_EMPTY_BEANS特性,仅绕过报错。但这种方式序列化出来的JSON会丢失大量核心属性,几乎无法反序列化还原为可用的XSSFWorkbook对象,仅适合调试场景。
Jersey中配置示例:

@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper> {
    private final ObjectMapper objectMapper;

    public JacksonConfig() {
        objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return objectMapper;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:03