How an optional property can be ignored when using jackson to convert Java object

jackson, java, json

Solution

To skip the value if it's not present:

- Use `Boolean` instead of the `boolean` primitive (`boolean` values are always set to `true` or `false`).

- Configure Jackson not to serialize nulls by using `@JsonInclude(Include.NON_NULL)` or `@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)`, depending on the version.

Problem

I'm using Jackson 1.9.2(org.codehaus.jackson) to convent from Java object to matching JSON construct. Here is my java object: ``` Class ColorLight { String type; boolean isOn; String value; public String getType(){ return type; } public setType(String type) { this.type = type; } public boolean getIsOn(){ return isOn; } public setIsOn(boolean isOn) { this.isOn = isOn; } public String getValue(){ return value; } public setValue(String value) { this.value = value; } } ``` If I did the following conversion, I'd get the result I want. ``` ColorLight light = new ColorLight(); light.setType("red"); light.setIsOn("true"); light.setValue("255"); objectMapper mapper = new ObjectMapper(); jsonString = mapper.writeValueAsString(); ``` jsonString would be like: ``` {"type":"red","isOn":"true", "value":"255"} ``` But sometimes I don't have the value of isOn property ``` ColorLight light = new ColorLight(); light.setType("red"); light.setValue("255"); ``` But the jsonString is still like: ``` {"type":"red","isOn":"false", "value":"255"} ``` Where "isOn:false" is default value of Java boolean type which I don't want it be there. How can I remove the isOn property in the final json construct like this? ``` {"type":"red","value":"255"} ```

Original source