无法使用带参数的构造函数 NO_CONSTRUCTOR 实例化 java.util.Set
Failed to instantiate java.util.Set using constructor NO_CONSTRUCTOR with arguments
我有这个代码:
@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;
}
在我执行 findAll
mongo 操作的某个时刻,我收到此错误:
Failed to instantiate java.util.Set using constructor NO_CONSTRUCTOR with arguments
你能看出问题出在哪里吗?
谢谢!
当您从数据库调用 localizedInformations 的实例时,您的工具会尝试根据从数据库收集的数据和您 class 定义的结构构建它。您编写了 Set,该过程将尝试实例化一个 Set(这是不可能的,因为它是一个接口)并且该过程不会尝试猜测您想要使用哪种实际实现。因此,您应该为您的成员指定一个实际的 Set 实现。
这里有一个例子
private Map<String, Set<Info>> localizedInfos = new HashMap<>();
此代码的问题在于,当您保存数据时没有出现错误。
那么当你检索数据时,
(正如 Zsolt V 解释的那样)java 尝试再次构建该数据,
但是因为那个对象的类型是一个接口,java 不能决定它是什么类型的集合(它可以是 HashSet,LinkedHashSet 等等)
一个简单的解决方案是像这样使用 HashSet 而不是 Set
private Map<String, HashSet<Info>> localizedInfos = new HashMap<>();
我在尝试保存密钥对象形式 Spring 安全包时遇到了这个问题,它是和接口
祝编码人员好运。
保持堆栈流动:D
我有这个代码:
@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;
}
在我执行 findAll
mongo 操作的某个时刻,我收到此错误:
Failed to instantiate java.util.Set using constructor NO_CONSTRUCTOR with arguments
你能看出问题出在哪里吗?
谢谢!
当您从数据库调用 localizedInformations 的实例时,您的工具会尝试根据从数据库收集的数据和您 class 定义的结构构建它。您编写了 Set,该过程将尝试实例化一个 Set(这是不可能的,因为它是一个接口)并且该过程不会尝试猜测您想要使用哪种实际实现。因此,您应该为您的成员指定一个实际的 Set 实现。
这里有一个例子
private Map<String, Set<Info>> localizedInfos = new HashMap<>();
此代码的问题在于,当您保存数据时没有出现错误。 那么当你检索数据时, (正如 Zsolt V 解释的那样)java 尝试再次构建该数据, 但是因为那个对象的类型是一个接口,java 不能决定它是什么类型的集合(它可以是 HashSet,LinkedHashSet 等等)
一个简单的解决方案是像这样使用 HashSet 而不是 Set
private Map<String, HashSet<Info>> localizedInfos = new HashMap<>();
我在尝试保存密钥对象形式 Spring 安全包时遇到了这个问题,它是和接口
祝编码人员好运。
保持堆栈流动:D