无法使用带有参数的构造函数NO_CONSTRUCTOR在MongoDB中

时间:2016-11-23 08:00:32

标签: json spring mongodb

enter image description here我正在使用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);

3 个答案:

答案 0 :(得分:6)

我做了这些更改并按预期工作。

Map<String, Object> profile;

答案 1 :(得分:1)

出现此问题是因为com.fasterxml.jackson.databind.node.ObjectNode类没有默认构造函数(没有参数构造函数),而Jackson期望默认构造函数。

Related Post refer azerafati's answer

如果在域类中将profiler字段定义为静态,则可以解决该问题。

private static Map<String, JsonNode> profiler;

请注意,静态字段有其自身的局限性和问题。我可以保证这将解决上述异常。但是,它可能不是最合适的解决方案。

答案 2 :(得分:0)

就我而言,问题已解决。我有我定义的实体:

a

我改成:

private JsonNode data;

或者这也有效:

private Map<String,String> data;

如果您有任何问题,请告诉我