当前位置: 首页 > 知识库问答 >
问题:

Jackson没有调用CustomContextResolver的getContext()方法

夹谷信鸿
2023-03-14
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;


@Provider //makes this bean a Provider
public class LocalDateObjectMapperContextResolver implements ContextResolver<ObjectMapper>{

    private final ObjectMapper MAPPER;

    public LocalDateObjectMapperContextResolver() {
        MAPPER = new ObjectMapper();
        MAPPER.registerModule(new JavaTimeModule());
        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

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

}
<jaxrs:client id="testclient"
    serviceClass="package1.RESTService"
    username="abc"
    password="abc"
    address="$serviceURL">

    <jaxrs:features>
        <bean class="org.apache.cxf.transport.common.gzip.GZIPFeature"/>
        <cxf:logging/>
    </jaxrs:features>

    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
        <bean class="mypackage.LocalDateObjectMapperContextResolver"/>
    </jaxrs:providers>

</jaxrs:client>
<jaxrs:server>
.....
 <jaxrs:providers>
    <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
            <bean class="mypackage.LocalDateObjectMapperContextResolver"/>
  </jaxrs:providers>
</jaxrs:server>

我还尝试扩展ObjectMapper并在那里注册javaTimeModule,但不知道如何在Jackson Flow中注册customObjectMapper。我只是把默认构造函数用于测试,它确实在应用程序启动时被调用,但话说回来,没有结果,我仍然得到同样的错误。

错误:找不到适合类型[简单类型,类java.time.LocalDate]的构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?)

共有1个答案

夏经武
2023-03-14

我遇到了与@Peeskillet在问题评论中描述的完全相同的问题。

我使用的是版本2中的Jackson依赖项和版本1中的jackson-jaxrs。

当将所有依赖项移到版本2时,所有问题都解决了。

 类似资料:
  • 我刚开始学习Java,试着画一些矩形。 我运行了这个示例,但不明白一件事:类ShapesDemo2D有一个构造函数: 我明白挫折是一种方法。 但是如果没有类或实例引用,如何调用它呢? 这是组件中抽象组件类的方法。java文件。 它不应该像或 但组件是一个抽象类,所以它不能被实例化,它的方法也不能被调用。 那么,怎样才能调用这个方法呢

  • 朋友 Jackson框架提供了基于注释的方法来在序列化过程中发出类型信息。 我不想在我的任何类中使用@JsonTypeInfo注释。 上述注释是否有替代方案。 如果是,请举例说明如何做到这一点。

  • 问题内容: 我正在尝试使用杰克逊对POJO进行序列化和反序列化。从POJO到JSON可以完美地工作,而从另一个方向去则不行。 我有一个POJO 并运行和测试我运行了calendar.model包; 引发异常 我已经尽力将JSON转换为POJO了,但是没有。如果我从JSON映射到Map类型,它确实可以工作。 谢谢您的帮助 编辑 这是我依赖中的杰克逊的grep 看起来除了jackson2之外,没有其他

  • 当我将java对象转换为json字符串时,我尝试组织动态@JsonIgnore属性。在示例中,它以下一种方式为(codehause jackson)ObjectMapper oMapper=new ObjectMapper();奥马尔。setSerializationConfig(。。。 或者以fasterxml objectMapper为例。getSerializationConfig()。se

  • 我在阅读片段文档时发现了以下内容: 注意:如果在片段中需要上下文对象,可以调用getContext()。但是,要注意的是,只有当片段附加到活动时才调用getContext()。当片段尚未附加或在其生命周期结束时分离时,getContext()返回null 所以我的问题是在片段中调用getContext()的最佳位置是什么。就像我可以在onCreateView中调用它一样,或者在任何其他地方调用on

  • 问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案: