Jackson 未调用 CustomContextResolver 的 getContext() 方法

2023-12-11

我已经在这个问题上苦苦挣扎了好几天,不知道如何解决这个问题。任何快速帮助将不胜感激。 我需要从使用 apache CXF 和 jackson 从 REST 服务构建接收到的 JSON 字符串转换 LocalDate。我编写了自定义 ContextResolver 并在 Mapper 对象中注册了 JavaTimeModule。 当我运行应用程序时,默认构造函数被调用,这意味着它已被加载,但返回 ObjectMapper 的 getContext() 方法永远不会被调用。

我在服务器端和客户端注册了相同的ContextResolver。 所有依赖项均已就位(jackson databind、core、annotation、datatype-jsr310)。

当我直接在浏览器中点击 REST URI 时,我能够获取 JSON 响应。当我从客户端代码调用相同的 URI 带注释的方法时出现问题 下面是我的客户端代码。

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>

同样的方式,这个 contextResolver 也在服务器端注册

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

没有调用 getContext 的任何原因?

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

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


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

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

将所有依赖项移至版本 2 后,所有问题都得到了解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson 未调用 CustomContextResolver 的 getContext() 方法 的相关文章

随机推荐

  • 如何使用 PuPHPet 制作 Sequel Pro?

    我刚刚使用 Vagrant 和 Puphpet 设置了一个虚拟机 我知道我有 MySQL 因为我可以mysql在命令行中 我刚刚进行了基本安装 我不知道如何设置我的续集专业版才能访问 我在 Sequel Pro 应用程序上使用 标准 选项
  • Nestjs 到 Azure Windows 应用程序服务 - web.config 设置

    从昨天开始 我一直在尝试将 Nestjs api 部署到 azure 但没有成功 起初 我试图将其推送到 Linux 云服务计划 并能够从 vs code 部署它 在 azure 日志中看到该应用程序已成功启动 但它不会从我的端点返回任何数
  • 迭代简短的固定字符串列表[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在 C 中迭代简短的文字字符串列表 其中所有元素都是预先知道的 的最有效 优雅 惯用的方法是什么 可以用向量来完成 for auto color std vector
  • 如何以编程方式为 UIButton 提供光泽外观?

    我想为某些 iPhone UIButtons 添加 3D 或光泽外观 但这样做时不使用 PNG 或可拉伸图像 我有很多不同形状和大小的按钮 其中有很多颜色是动态生成的 因此预渲染图像在我的情况下不可行 您将如何以编程方式在这些按钮上绘制光泽
  • 在 catch 处理程序中打印异常回溯的可靠方法?

    我想在我的 C 程序中启用异常的完整日志记录 我想做的就是在 seh catch handler 中捕获软件 硬件异常 然后打印异常的完整回溯 我主要对异常的起源感兴趣 调用堆栈对我来说就足够了 try difficult task exc
  • 如何使用 UIScrollView 实现 UIPageViewController?

    我拿了照片滚动来自苹果网站的示例 并尝试通过复制代码来实现我自己的专辑 现在UIScrollView不可见 我该如何让它出现 我所做的唯一代码更改是创建UIPageViewController 就我而言 这是一个UIViewControll
  • 退出时保存应用程序数据状态

    我有一个包含 24 个字符串的 NSMutableArray 如果用户接到电话或退出应用程序 我需要保存这些数据 我一直在研究很多例子 但由于某种原因似乎无法确定保存数据的最佳方法 24 个字符串对应 24 个按钮及其状态 单击按钮时 它会
  • 在 Sencha Touch 2 中从商店加载轮播?

    有没有人有一个代码示例 可以从商店 在我的例子中是 JSON 商店 加载 Sencha Touch 2 Carousel 组件 我了解如何加载扩展 DataView 的列表 但 Carousel 似乎是一个更难解决的问题 因为它不扩展 Da
  • C# 中 AppDomain 的使用

    C 中 AppDomains 最重要的用途是什么 The 最重要的一个使用的是你的代码必须有一个 即您用 C 编写的所有内容都在AppDomain 这非常重要 p 如果你的意思是额外的应用程序域 当使用插件和其他不受信任的代码时 它允许您隔
  • 是否可以将 html get 请求从 create-react-app 代理到 /graphql ?

    我有一个 create react app 应用程序 在其中通过添加以下内容来启用代理 proxy http localhost 3001 到我的 package json 这对于对 graphql 的 API 请求效果很好 但是当 Web
  • CodeIgniter 未加载页面

    我有一个使用 codeigniter 开发的 Web 应用程序 它在我以前的服务器中运行良好 现在我更改了我的服务器 当我尝试运行该 Web 应用程序时 除了空白屏幕之外什么也没有 当我尝试打开现有链接时http mydomain com
  • 是否有用于创建茎叶图的 pandas 函数

    有没有相当于R的pandasstem 用于为数字创建茎叶图的函数Series 我可以轻松编写一些代码 但想知道我是否错过了精美手册中的某些内容 输出示例 16 070355555588 18 000022233333335577777777
  • java 将字符串月份转换为整数

    如何将月份字符串转换为整数 在单击方法中 我想显示所选的日期 但如果该日期有事件 它应该显示有关该事件的更多信息 检查假期事件的方法需要整数值 这是代码 UPDATED Override public void onClick View v
  • 我如何使用 awk 打印多个分隔符单词? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我有一个带有正则表达式分隔符的 awk 我需要提取名字和姓氏的单词 但是这个命令不起作用 awk v OFS t v FS firstName lastName sum 1 2 print
  • 将 Uint8List 转换为文件

    我正在使用图像选择器网络 效果很好 我可以在中显示图像Image memory 但是此图像的格式为 Uintlist8 为了保存在存储需要格式File 我的问题是如何将图像保存在Firebase 存储 网页图像选择器 class Secon
  • 如何生成列表的所有排列?

    如何生成列表的所有排列 例如 permutations permutations 1 1 permutations 1 2 1 2 2 1 permutations 1 2 3 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3
  • 按下按钮时的动画文本转换

    我有 3 种类型的报价 当按下相应的按钮时 如果从类别 1 到类别 2 再到类别 3 则报价会消失 反之亦然 然而 我想让引用消失 即使它们来自同一类别 现在 当引用来自不同类别时 它就会消失 如何才能做到这一点 谢谢 我认为这与按钮有关
  • Rust impl 具有私有字段的默认特征

    当我进行此类设置时 我收到错误 默认 测试 rs mod default mod use default mod Point fn main let p1 Point new let p2 Point Point z 1 Default d
  • Raphael JS 中的弧线动画在 Chrome 中摆动

    我在动画中看到恼人的摆动 我已经删除了包含实际动画的代码 var side 400 var paper new Raphael this 100 side paper customAttributes arc function xloc y
  • Jackson 未调用 CustomContextResolver 的 getContext() 方法

    我已经在这个问题上苦苦挣扎了好几天 不知道如何解决这个问题 任何快速帮助将不胜感激 我需要从使用 apache CXF 和 jackson 从 REST 服务构建接收到的 JSON 字符串转换 LocalDate 我编写了自定义 Conte