【发布时间】: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;
}
}
【问题讨论】:
-
不,你不能使用 setter。无论如何,这听起来像是一个糟糕的设计......