java - 如何在 Jersey Web 应用程序中执行自定义 JSON Marshaller?
问题描述
我正在使用 Jersey 运行一个 Web 应用程序。在我的控制器中,我试图在资源中获取一个文件,并返回一个包含enum
. enum
里面也有两个字段。当对象被编组时,我收到错误:
jakarta.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.
at org.glassfish.jaxb.runtime.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:541)
at org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:445)
at org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:268)
at org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:196)
at jakarta.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:80)
at com.jtv.insights.controller.IngestionController.getIngestionLogDetails(IngestionController.java:194)
我的代码是:
@GET
@Path(value = "/log/details/{fileId}")
@Produces(MediaType.APPLICATION_JSON)
public List<IngestionLogs> getIngestionLogDetails(@PathParam("fileId") String fileId) {
List<IngestionLogs> logs = new ArrayList<>();
// added data in list
try {
JAXBContext ctx = JAXBContext.newInstance(new Class[] { IngestionLogs.class });
Marshaller jsonMarshaller = ctx.createMarshaller();
jsonMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jsonMarshaller.setAdapter(new LogsAdapter());
jsonMarshaller.marshal(logs, response.getOutputStream());
return logs;
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
我的对象是:
@XmlJavaTypeAdapter(LogsAdapter.class)
public class IngestionLogs {
private LogType type;
private String message;
private LocalDateTime lastModified;
private String fileName;
private int rowNumber;
private int columnNumber;
private String cellValue;
private String columnName;
// getters & setters
}
如何修复此错误,创建一个自定义函数来编组我的对象并将此列表作为 JSON 返回?
解决方案
您可以省略属性映射,并且您的类 com.jtv.insights.tool.model.IngestionLogs 需要有一个不带参数的默认构造函数(public IngestionLogs() {})。
推荐阅读
- c# - Npoi ICell.DateCellValue 返回 NullReferenceException
- modelica - 参数定义部分是否可以有一个 if 块(不仅仅是一个语句)?
- ruby-on-rails - ActiveStorage - 选择要删除的图像
- java - 如何在 java 中读入 MySql 视图的字符串列表内容?
- nltk - 如何防止 NLTK 拆分特定词?
- javascript - 如果通过身份验证,ReactJS 使用重定向登录
- javascript - 从 python 调用 Google Map Javascript API
- android - AndroidX,Autovalue support.annotations 错误的依赖
- performance-testing - 当领域数达到470左右时,Keycloak基本上变得不稳定
- ruby-on-rails - 绕过特定用户的设计数据库身份验证