当前位置: 首页 > 知识库问答 >
问题:

如何使用继承序列化构建器类?

扈翰
2023-03-14

我面临一个生成器类继承的序列化问题。如下所示:

@Getter
@Setter
public class NumberRuleConfig extends BaseRuleConfig{
    private Double min;
    private Double max;
    private Double step;
    private Map<String, Object> defaultValue;

    @Builder
    public NumberRuleConfig(Boolean enabled,
                            Boolean editable,
                            Double min,
                            Double max,
                            Double step,
                            Map<String, Object> defaultValue) {
        super(enabled, editable);
        this.min = min;
        this.max = max;
        this.step = step;
        this.defaultValue = defaultValue;
    }

    public NumberRuleConfig(Boolean enabled, Boolean editable) {
        super(enabled, editable);
    }
}

基类:

@Getter
@AllArgsConstructor
public class BaseRuleConfig {
    public Boolean enabled;
    public Boolean editable;

    public BaseRuleConfig() {
    }
}

我看到以下例外:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.NumberRuleConfig$NumberRuleConfigBuilder and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ImmutableCollections$MapN["ruleSetDefinitions"]->com.example.RuleDefinitions["constraints"]->java.util.ArrayList[7]->com.example.NumberRule["config"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1277)
    at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33)

有人知道如何避免这个问题吗?

共有1个答案

苏鸿才
2023-03-14

以下注释可以正常工作:

@Jacksonized@SuperBuilder

 类似资料:
  • 问题内容: 我正在尝试仅使用json.net序列化类的继承属性。我知道[JsonIgnore]属性,但是我只想在某些情况下忽略它们,因此我改用了自定义JsonConverter。 这是我的课: 做一个简单的o.WriteTo(writer); 它给出的结果与不使用转换器的结果相同。当遍历属性并在属性上使用WriteTo时,它对于基本类型(int,字符串等)正常工作,但是集合存在问题。 预期: 得到

  • 在Android应用程序中,我需要用一个抽象级别反序列化Kotlin数据类的Json数据。但我不知道如何在构造函数中放置正确的属性。 简单来说,假设我有一个形状: 有两个派生 和 所以我的目标是,不要实例化一个形状。所以,相反,总是反序列化它的派生。稍后,我需要处理其他类中的一些集合属性,如: 但我还必须知道每个元素的派生类型。 当我尝试用Gson反序列化给定的示例时 我总是有一个非法的辩论例外

  • 问题内容: 我需要为每种构建类型创建构建器(基础)和特定的构建器。 …。 主要功能如下: File:Builder.go 接口 文件:nodebuilder.go 主要假设/过程: 要开始在每个模块上构建,我需要获取它的路径 我需要将模块复制到临时文件夹 我需要在其上运行构建(实现构建界面,如此类 ) 构建完成后,用dep压缩模块 将其复制到新的目标文件夹 注意:除了和之后(应专门处理),所有其他

  • 由于无法解析最后一个链接调用,未定义方法,因此此调用将不会编译。所以这种方式要求所有调用都以特定的顺序链接起来,这是非常不切实际的,特别是对于一个深度层次结构树。 现在,在我寻找答案的过程中,我遇到了一个Java Builder类的子类,它建议使用奇怪的递归泛型模式。但是,由于我的层次结构不包含一个抽象类,所以这个解决方案对我不起作用。但是这种方法依赖于抽象和多态性来发挥作用,这就是为什么我不相信

  • 问题:类A实现可序列化类B扩展了类A实现可序列化 现在我只使用类B作为运行时类型进行序列化。所以我有一个列表: 如果我现在反序列化它,我就得到了java。伊奥。OptionalDataException错误。我想知道的是,我的对象如何成为正确的运行时类型。反序列化: 如果在序列化时是类B的运行时类型,这是否会导致类B的运行时类型,或者我必须覆盖A的earch子类的默认序列化? 希望我没有错过任何明

  • 我在某个地方读到boost的序列化库必须被编译(我忘了在哪里读的,否则我会发布链接)。 因此,我从source forge下载了最新版本,并将其提取到我项目中的一个路径中。现在呢? 编辑:尽管如此,我试图使用它,但没有编译它,但我得到了这个错误: 所以我认为原因是,它没有被编译。对吗?