Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Failed to instantiate com.fasterxml.jackson.databind.node.ObjectNode using constructor NO_CONSTRUCTOR with arguments In MongoDB

enter image description hereI'm using JsonNode for getting data from any kind of jason format and storing it to mongoDb But while fetching data from mongoDB it is throwing error as below.

Failed to instantiate com.fasterxml.jackson.databind.node.ObjectNode using constructor NO_CONSTRUCTOR with arguments

Below is my domain class

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);
}

And my controller call is as below and I'm getting the error on this line.

Profiler profile=profileService.findOneByEmail(email);
like image 748
Bhargav Patel Avatar asked Nov 23 '16 08:11

Bhargav Patel


2 Answers

I have made this changes and work as expected.

Map<String, Object> profile;
like image 68
Bhargav Patel Avatar answered Sep 20 '22 18:09

Bhargav Patel


This problem occurs because com.fasterxml.jackson.databind.node.ObjectNode class doesn't have default constructor (no argument constructor) and Jackson expects the default constructor.

Related Post refer azerafati's answer

The problem can be resolved if you define the profiler field as static in domain class.

private static Map<String, JsonNode> profiler;

Please note that static fields have its own limitations and issues. I can assure that this would resolve the above exception. However, it may not be the most appropriate solution.

like image 27
notionquest Avatar answered Sep 18 '22 18:09

notionquest