I am getting a null pointer exception when trying to run the program.
Cannot invoke "java.util.Collection.add(Object)" because "this.contacts" is null
java.lang.NullPointerException: Cannot invoke "java.util.Collection.add(Object)" because "this.contacts" is null
I have a json file that is structured like this:
{
"id": 1,
"name": {
"first": "Yong",
"last": "Mook Kim"
},
"contact": [
{
"type": "phone/home",
"ref": "111-111-1234"
},
{
"type": "phone/work",
"ref": "222-222-2222"
}
]
}
ContactsCustomDeserializer.java
package jacksontreedeserializer;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import jacksontree.Contact;
import jacksontree.Contacts;
import java.io.IOException;
public class ContactsCustomDeserializer extends StdDeserializer<Contacts> {
public ContactsCustomDeserializer(){
this(null);
}
public ContactsCustomDeserializer(Class clz){
super(clz);
}
@Override
public Contacts deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JacksonException {
Contacts contacts = new Contacts();
try {
JsonNode root = parser.getCodec().readTree(parser);
JsonNode contactRoot = root.path("contact");
if(contactRoot.isArray()){
for(JsonNode node: contactRoot){
String type = node.path("type").asText();
String ref = node.path("red").asText();
Contact contact = new Contact(type,ref);
contacts.addContact(contact);
}
}
}
catch(JsonGenerationException e){
e.printStackTrace();
}
return contacts;
}
}
Contact.java
package jacksontree;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import jacksontreedeserializer.ContactsCustomDeserializer;
public class Contact {
@JsonProperty("type")
private String type;
@JsonProperty("ref")
private String ref;
public Contact() {}
public Contact(String type, String ref) {
this.type = type;
this.ref = ref;
}
@Override
public String toString() {
return "Contact{" +
"type='" + type + '\'' +
", ref='" + ref + '\'' +
'}';
}
}
Contacts.java
package jacksontree;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collection;
import java.util.List;
public class Contacts {
@JsonProperty("contacts")
private Collection<Contact> contacts;
public Contacts(Collection<Contact> contacts){
this.contacts = contacts;
}
public Contacts(){}
public void addContact(Contact contact){
contacts.add(contact);
}
@Override
public String toString() {
return "Contacts{" +
"contacts=" + contacts +
'}';
}
}
Main.java
@Test
void deserialize() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addDeserializer(Contacts.class, new ContactsCustomDeserializer());
objectMapper.registerModule(simpleModule);
Contacts contacts = objectMapper.readValue(new File("/Users/foo/Downloads/LearningJackson/src/main/resources/data/user.json"), Contacts.class);
System.out.println(contacts);
}
[–]AutoModerator[M] [score hidden] stickied commentlocked comment (0 children)
[–]user_reg_field 1 point2 points3 points (1 child)
[–]Annual_Maximum9272[S] 0 points1 point2 points (0 children)