I have classes like this :
<code>public class Root {
public List<Collect> collect;
}
public class Collect {
public Flag flag;
}
public class Flag {
public String name;
}
</code>
<code>public class Root {
public List<Collect> collect;
}
public class Collect {
public Flag flag;
}
public class Flag {
public String name;
}
</code>
public class Root {
public List<Collect> collect;
}
public class Collect {
public Flag flag;
}
public class Flag {
public String name;
}
now i want to deserialize json string to root object :
<code>import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class MainClass {
private static final ObjectMapper om = new ObjectMapper();
public static void main(String[] args) throws IOException {
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, false);
om.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//language=JSON
String str = "{"collect": [{"flag": {"name": "ali"}},{"item": {"value": "test"}}]}";
Root root = om.readValue(str, Root.class);
String output = om.writeValueAsString(root);
System.out.println(output);
}
}
</code>
<code>import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class MainClass {
private static final ObjectMapper om = new ObjectMapper();
public static void main(String[] args) throws IOException {
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, false);
om.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//language=JSON
String str = "{"collect": [{"flag": {"name": "ali"}},{"item": {"value": "test"}}]}";
Root root = om.readValue(str, Root.class);
String output = om.writeValueAsString(root);
System.out.println(output);
}
}
</code>
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class MainClass {
private static final ObjectMapper om = new ObjectMapper();
public static void main(String[] args) throws IOException {
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, false);
om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, false);
om.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//language=JSON
String str = "{"collect": [{"flag": {"name": "ali"}},{"item": {"value": "test"}}]}";
Root root = om.readValue(str, Root.class);
String output = om.writeValueAsString(root);
System.out.println(output);
}
}
my problem is :
i have unknown key in json named item
and jackson does not ignore unknown properties.
this is serialization result :
<code>{"collect":[{"flag":{"name":"ali"}},{}]}
</code>
<code>{"collect":[{"flag":{"name":"ali"}},{}]}
</code>
{"collect":[{"flag":{"name":"ali"}},{}]}
Why jackson does not ignore null objects ?
I want to do it globally without using annotations .