我正在使用 JsonNode 从任何类型的 jason 格式获取数据并将其存储到 mongoDb 但是,当从 mongoDB 获取数据时,它会抛出如下错误。
Failed to instantiate com.fasterxml.jackson.databind.node.ObjectNode using constructor NO_CONSTRUCTOR with arguments
下面是我的域类
public class Profiler {
@Id
private String id;
@Field("email")
private String email;
@Field("profiler")
private Map<String,JsonNode> profiler;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Map<String, JsonNode> getProfiler() {
return profiler;
}
public void setProfiler(Map<String, JsonNode> profiler) {
this.profiler = profiler;
}
public Profiler(String email,Map<String,JsonNode> profiler){
this.email=email;
this.profiler = profiler;
}
@JsonCreator
public Profiler(@JsonProperty("_id")String id,@JsonProperty("email")String email,@JsonProperty("profiler")Map<String,JsonNode> profiler){
this.id=id;
this.email=email;
this.profiler = profiler;
}
public Profiler(String id){
this.id=id;
}
public Profiler(Map<String,JsonNode> profiler){
this.profiler = profiler;
}
public Profiler(){
}
}
public interface ProfilerRepository extends MongoRepository<Profiler, String>{
public Profiler findOneByEmail(String email);
}
我的控制器调用如下,我在这一行收到错误。
Profiler profile=profileService.findOneByEmail(email);
我已经进行了此更改,并且它按预期工作。
Map<String, Object> profiler;
出现此问题是因为
com.fasterxml.jackson.databind.node.ObjectNode
类没有默认构造函数(无参数构造函数),而 Jackson 需要默认构造函数。
如果在域类中将
profiler
字段定义为静态,则可以解决该问题。
private static Map<String, JsonNode> profiler;
请注意,静态字段有其自身的局限性和问题。我可以保证这将解决上述异常。然而,这可能不是最合适的解决方案。
就我而言,问题已解决。我有我定义的实体:
private JsonNode data;
我将其更改为:
private Map<String,String> data;
或者这也有效:
private Map<Object,String> data;
如果您有任何疑问,请告诉我