【问题标题】:How to use a setter method when deserializing with Gson?使用 Gson 反序列化时如何使用 setter 方法?
【发布时间】:2022-06-16 00:07:48
【问题描述】:

当 JSON 字符串 {"a": 1} 被反序列化时,数字 100 应该添加到值 1。在 jsonb 中这是通过 setter 方法实现的,但 Gson 忽略了 setter 方法。如何让 Gson 使用 setter 方法?或者,如果这不可能,2022 年 Gson 的二传手的推荐替代方案是什么?

@RestController
public class NumberController {
    @RequestMapping("/number")
    public Number number() {
        String jsonString = "{\"a\":1}";

        // Gson.
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        Number numberWithGson = gson.fromJson(jsonString, Number.class);
        System.out.println(numberWithGson); // Number(a=1)

        // Jsonb.
        Jsonb jsonb = JsonbBuilder.create();
        Number numberWithJsonB = jsonb.fromJson(jsonString, Number.class);
        System.out.println(numberWithJsonB); // Number(a=101)

        return numberWithGson; // Returns {"a": 1}, but should return {"a": 101}
    }
}
public class Number {
    private int a;

    public void setA(int a) {
        this.a = a + 100;
    }
}

【问题讨论】:

标签: java gson


【解决方案1】:

我相信您需要使用 GSON 库中的注释标记属性 private int a,例如 @Expose@SerializedName,以便 GSON 机制正确反序列化 JSON 字符串。尝试参考此link 了解更多信息和示例。

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2018-07-20
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2011-12-04
    • 2017-01-27
    相关资源
    最近更新 更多