我是Jackson的新手,尝试使用ObjectMapper.readValue反序列化POJO时遇到这些错误:
冲突的字符串创建者:已经明确标记了[方法CLASSNAME#fromString(1个参数)],遇到了[方法CLASSNAME#valueOf(1个参数)]
fromString和valueOf都是具有相同签名的静态工厂方法。
我不能轻易删除一个或另一个,因为依赖关系已经在使用这两个了,尽管对于我正在测试的代码路径,如果我只删除valueOf,它确实可以工作。如前所述,如果不是永久解决方案,我会更愿意。
这两种方法都没有使用@JsonCreator进行注释,添加@JsonCreator并正确注释参数会产生相同的错误。
由于我看不到如何显式标记任何功能(因为我知道的唯一方法是@JsonCreator),为什么会发生此错误,或者在其他地方可以“显式标记”这些错误?是否可以同时拥有两者,然后仅使用其中之一进行反序列化?
答案 0 :(得分:0)
我从来没有想过第一个问题的答案,但是我设法通过在第二个函数中添加varargs并失败安全地回答了第二个问题,但实际上并没有让用户添加额外的参数。这只是更改方法签名。
之前:
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");
}
...
}