gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:20 33 4
gpt4 key购买 nike

我在构建 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com