无法使用带参数的构造函数 NO_CONSTRUCTOR 实例化 java.util.Set

Ann*_*nna 1 java spring mongodb lombok

我有这个代码:

@NoArgsConstructor
public class localizedInformations implements Serializable {

    @Getter
    @JsonProperty("infos")
    private Map<String, Set<Info>> localizedInfos = new HashMap<>();
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TechnicalInfo implements Serializable {

    private static final long serialVersionUID = -8926217088092761683L;

    private String label;

    private List<String> values;
}
Run Code Online (Sandbox Code Playgroud)

在执行findAllmongo 操作时的某个时刻,我收到此错误:

Failed to instantiate java.util.Set using constructor NO_CONSTRUCTOR with arguments
Run Code Online (Sandbox Code Playgroud)

你能看出问题出在哪里吗?

谢谢!

Far*_*had 5

这是一个例子

private Map<String, Set<Info>> localizedInfos = new HashMap<>();

这段代码的问题是,当您保存数据时,不会出现错误。然后当你检索数据时,(正如Zsolt V解释的)java尝试再次构建该数据,但是因为该对象的类型是一个接口,java无法决定它是什么类型的Set(它可以是HashSet,LinkedHashSet等) .)

一个简单的解决方案是使用 HashSet 而不是 Set,如下所示

private Map<String, HashSet<Info>> localizedInfos = new HashMap<>();

当我尝试从 Spring 安全包中保存 Key 对象时,我遇到了这个问题,它是一个接口

祝编码人员好运。

保持堆栈流动:D