是否可以让 jackson 自动发现未使用 getFoo()
命名方案命名、而是仅命名为 foo()
的 getter?
示例:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
class Test {
private final String foo;
public Test(String foo) {
this.foo = foo;
}
public String foo() {
return foo;
}
}
class Scratch {
public static void main(String[] args) throws JsonProcessingException {
final ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Test("example")));
}
}
此处,jackson 无法识别 foo()
getter。这种情况下的一种解决方案是使用 @JsonProperty
注释 getter。然而,我正在寻找一种方法来做到这一点,而不必手动注释每个单个 getter。
最佳答案
不可能;这里唯一可识别的方面(因为“深入研究字节码并检查它是否仅返回一个字段”绝对是 Not Acceptable ,因为这是可以在次要更新中更改的内部细节,因此是禁止的)是“任何没有参数、不是静态
并且返回除void
之外的内容的方法”。但其他方法也可能这样做。例如,字符串的 toLowerCase()
,它肯定不是任何方式或形式的 getter。
所以,即使不知道 jackson 的能力是什么,你所要求的实际上是完全不可能的。它是一些预先建立的名称模式(例如 getX)、注释或显式列表。没有其他选择。
关于java - 自动发现没有 get 前缀的 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030688/