java - “冲突的字符串创建者:已经明确标记...”;创建者在哪里明确标记?
问题描述
我是 Jackson 的新手,在尝试使用 ObjectMapper.readValue 反序列化 POJO 时看到这些错误:
冲突的字符串创建者:已经明确标记了 [方法 CLASSNAME#fromString(1 参数)],遇到了 [方法 CLASSNAME#valueOf(1 参数)]
fromString 和 valueOf 都是具有相同签名的静态工厂方法。
我不能轻易删除一个或另一个,因为依赖项已经在使用两者,尽管对于我正在测试的代码路径,如果我只删除 valueOf 它确实有效。如前所述,如果这不是永久解决方案,我更愿意。
这两种方法都没有使用@JsonCreator 注释,并且添加@JsonCreator 并正确注释参数会产生相同的错误。
由于我看不到任何一个函数是如何被显式标记的(因为我知道的唯一方法是@JsonCreator),为什么会发生这个错误,或者它们还能在哪里“显式标记”?是否可以同时拥有两者但只使用一个进行反序列化?
解决方案
我从来没有想出我的第一个问题的答案,但我设法通过将可变参数添加到我的第二个函数和故障安全来回答第二个问题,但实际上并没有让用户添加额外参数的异常。这只是为了更改方法签名。
前:
public static String fromString(String arg) throws Exception { ... }
public static String valueOf(String arg) throws Exception { ... }
后:
public static String fromString(String arg) throws Exception { ... }
public static String valueOf(String arg, Object... varargs) throws Exception {
if (varargs.length > 0) {
throw new IllegalArgumentException("Don't use these");
}
...
}
推荐阅读
- android - 使用 viewLifecycleOwner 作为 LifecycleOwner
- java - 如何在java中安排动态任务
- mysql - 查询中有多个 LIKE 语句
- android - Android List with a bigger item in the middle
- html - 如何将文本参数与谷歌字体 API 一起用于一种字体类型
- spring-webflux - Spring Reactor onErrorContinue not working
- reactjs - 如何部署像 Sizzy 这样的电子应用程序的构建?
- javascript - 在扩展表 HTML 中创建单元格名称
- java - 仅当 if 语句之一运行时才执行代码
- javascript - 如何在我的网站上向 Google 地图小部件添加用户输入标记,并从中获取纬度和经度数据?