modyfikacja mappera odpada, bo zajmuje sie tym taki mega uniwersalny mechanizm co do pierwszego pomyslu:
taki przyklad z neta:
// input and output:
// {
// "animals":
// [
// {"type":"dog","name":"Spike","breed":"mutt",
// "leash_color":"red"},
// {"type":"cat","name":"Fluffy",
// "favorite_toy":"spider ring"}
// ]
// }
import java.io.File;
import java.util.Collection;
import org.codehaus.jackson.annotate.JsonSubTypes;
import org.codehaus.jackson.annotate.JsonSubTypes.Type;
import org.codehaus.jackson.annotate.JsonTypeInfo;
import org.codehaus.jackson.map.ObjectMapper;
public class Foo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(
new CamelCaseNamingStrategy());
Zoo zoo =
mapper.readValue(new File("input_4.json"), Zoo.class);
System.out.println(mapper.writeValueAsString(zoo));
}
}
class Zoo
{
public Collection<Animal> animals;
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = Cat.class, name = "cat"),
@Type(value = Dog.class, name = "dog") })
abstract class Animal
{
public String name;
}
class Dog extends Animal
{
public String breed;
public String leashColor;
}
class Cat extends Animal
{
public String favoriteToy;
}
da się jakoś zrobić, żeby nie było w oupucie wzmianki o {"type":"dog","...} tylko od razu prperty z wlasciwego obiektu, bez tego (type) ?