gpt4 book ai didi

java - MrBean模块在反序列化时是否仍然自动支持动态实现简单接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 06:18:57 25 4
gpt4 key购买 nike

从 Jersey1 客户端转换为 Jersey2 客户端(使用 jackson 2.8.6)时,我现在在尝试读取接口(interface)时遇到映射异常

WebTarget resource = helper.resource(path);
if(schedule != null) resource = resource.queryParam("schedule", schedule);
return resource.request().get(new GenericType<MyInterface>(){});

Caused by: javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.mycompany.MyInterface: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

旧的客户端代码如下所示:

WebResource resource = helper.resource(path);
if(schedule != null) resource = resource.queryParam("schedule", schedule);
try
{
return resource.get(new GenericType<MyInterface>(){});
}
catch(UniformInterfaceException e)
{
throw new RuntimeException(e.getResponse().getEntity(String.class));
}

在这两种情况下,我对客户端对象映射器所做的只是:

objectMapper.registerModule(new MrBeanModule());

接口(interface)的动态实例化现在消失了吗?如果没有,需要执行哪些额外的配置步骤才能使其正常工作?

(我们的依赖关系有点困惑,所以我认为我使用的是 Jersey 1.6 和 Jackson 1.9.8)

编辑:作为我们之前依赖的行为的另一个例子,请参阅 http://www.cowtowncoder.com/blog/archives/2011/08/entry_459.html其中有一个没有注释的简单界面

最佳答案

我想我是在付出了很多心血、汗水和泪水之后才找到的。

我发现我配置的ObjectMapper实际上不是正在使用的。

Jersey 1

clientConfig.getSingletons().add(new JacksonJsonProvider(objectMapper));
Client client = new Client(urlConnectionClientHandler, clientConfig);

JAXRS2(什么不起作用)

 clientConfig.register(new JacksonJsonProvider(objectMapper));
Client client = ClientBuilder.newClient(cc);

我发现创建实际使用的 ObjectMapper 的组件是 JacksonJaxbJsonProvider,并且使用 ClientConfig 注册它不起作用,但在客户端上注册它却起作用。

JAXRS2(什么有效)

    Client client = ClientBuilder.newClient(cc);
client.register(new JacksonJaxbJsonProvider(objectMapper, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS));

关于java - MrBean模块在反序列化时是否仍然自动支持动态实现简单接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48575742/

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