java - JAX-RS:对遗留对象的 JSON 反序列化 - 如何为遗留接口(interface)提供帮助器/工厂?

标签 java json jax-rs jsonb apache-tomee

我在构建 stub 测试服务器来测试我们新为旧系统编写的客户端时遇到了一种情况,我想将传入的 JSON 请求正文反序列化为供应商为同一旧系统提供的对象层次结构。

换句话说,我想使用供应商类而不是构建我自己的类。

我已经设法使 Eclipse Microplatform 客户端(在最新的 TomEE 中运行)开始填充基本遗留对象,但随后失败,无法在对象内实例化接口(interface),这是有道理的,因为没有元数据。

  @POST
    @Produces({ MediaType.APPLICATION_JSON })
    @Consumes({MediaType.APPLICATION_JSON})
    public String post(MessageObject messageObject) {
</pre><p><b>Root Cause</b></p><pre>javax.json.bind.JsonbException: interface /vendor interface class/ not instantiable
    org.apache.johnzon.jsonb.JohnzonJsonb.fromJson(JohnzonJsonb.java:200)
    org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider.readFrom(JsonbJaxrsProvider.java:182)
...

由于我没有这些类的源代码,我在考虑是否可以告诉反序列化器(如依赖注入(inject)中的提供者)如何实例化接口(interface)。我对客户端有完全的控制权。

我对此不太熟悉,所以我希望知道如何解决这个问题,或者这是一个失败的原因?

最佳答案

是的,您可以绑定(bind)接口(interface)的实现,请参阅 https://johnzon.apache.org/ , johnzon.interfaceImplementationMapping 部分。它可以在可配置提供程序的 resources.xml 中设置。要设置的类是 https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java属性键是interfaceImplementationMapping,其值是使用属性语法。

希望对你有帮助

关于java - JAX-RS:对遗留对象的 JSON 反序列化 - 如何为遗留接口(interface)提供帮助器/工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56936381/

相关文章:

java - REST @FormParam 为空

java - MOXy 不导入它生成的其他模式

javascript - 变量转换为 Json 对象 - Javascript

python - 使用 python 将 CSV 文件转换为 JSON 文件

rest - NoMessageBodyWriterFoundFailure

java - 具有多个同名参数的 JAX-RS 查询

java - 我如何结合 TABLE_PER_CLASS 和 GenerationType.IDENTITY

java - Sonarqube 将 AOP Throwable 视为一个问题

java - 在 REST 中将 java 对象转换为 XML 时出错

javascript - postman :在环境变量的声明中使用请求名称