java - 自动发现没有 get 前缀的 getter

标签 java json jackson jackson-databind

是否可以让 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/

相关文章:

java - 分析核心 java 以检查每个计数器的方法统计数据和延迟

java - 在定义 Class<?> 的方法中声明泛型类型

java - Spring Controller 生成的 JSON 内容无效(使用 Jackson 库)

javascript - 通过 javascript(包括 JSON 对象)访问在 Android 上使用 Java 创建的 JSON 数组

java - 解析 JSON 数据时出现异常

json - VB.net 中 json.net 的简单工作示例

Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同

java - 应用程序引擎预热请求不适用于端点

java - 在 Android 模拟器中更改语言环境

java - 可以在 javaFX 框架内打开另一个应用程序吗?