目标是强制重写getter,它在我序列化时返回一个常量。我在类方面寻找解决方案,而不是在序列化器上。
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import com.google.gson.Gson;
abstract class AbstractClass implements Serializable {
@Setter
@Getter
private String abstractVariable;
public abstract String getAbstractVariable();
}
@Data
class ConcreteClass extends AbstractClass implements Serializable {
private String concreteVariable;
@Override
public String getAbstractVariable() {
return "Constant Value";
}
}
Gson gson = new Gson();
System.out.println("ConcreteClass="+gson.toJson(new ConcreteClass()));
=>
ConcreteClass={}
这个解决方案不起作用,我尝试了很多事情没有成功:@Getter(AccessLevel.NONE)@Expose(serialize = false)...
1条答案
按热度按时间tvz2xvvm1#
由于GSON使用反射来访问字段,而不是getter/setter,因此我的解决方案无法工作。我尝试使用Gson JsonSerializer和TypeAdapter,但它们的方法无法访问字段的父示例来调用getter(太糟糕了,它会很酷,并提供很多可能性)。
因此,为了强制设置 abstractVariable,我现在在抽象类中使用构造函数。因此,我不能在扩展类中使用@Data,必须用许多注解来替换它:
如果有人看到另一个解决方案,我很想知道它,特别是如果它更简单