I have a class like
interface IHideable {
boolean isHidden();
}
class Address implements IHideable {
private String city;
private String street;
private boolean hidden;
}
class PersonalInfo implements IHideable {
private String name;
private int age;
private boolean hidden;
}
I want to serialize a List of IHideable in my web service; but filter out any object which has the hidden field set to true.
Basically given with a list of objects like
[
{'city 1','street 1',false},
{'city 2','street 2',true},
{'city 3','street 3',false}
]
I want the output as
[
{
city:'city 1',
street:'street 1'
},
{
city:'city 3',
street:'street 3'
}
]
I tried the following implementation
class ItemSerializer extends JsonSerializer<IHideable> {
@Override
public void serialize(IHideable value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (!value.isHidden()) {
jgen.writeStartObject();
jgen.writeString("city", value.city);
jgen.writeString("street", value.street);
jgen.writeEndObject();
}
}
}
But the writeString methods written are specific for Address class. When i use writeObject there it throws stackoverflow exception. Can I use some generic writeObject method which Can write any object which implements IHideable()? Is this possible with jackson default/custom serialization?