Я хочу запрограммировать спокойный API и аннотировать свои данные с schema.org.Для этого я хотел использовать Джексона-Jsonld.Обозначать простые объекты с помощью jackson-jsonld не составило труда, но сложные объекты с вложенными объектами застряли.В моем jsonld простые атрибуты, такие как id, name были аннотированы, а вложенное местоположение - нет.
Я читал о сериализации и о том, что она должна помочь получить второй объект.Однако после реализации моей части сериализации кажется, что сериализация ничего не изменила.Вот мой пример вывода, тип для местоположения должен быть PostalAddress, однако тип отсутствует:
{"@context":
{"uri":"http://schema.org/url","name":"http://schema.org/name","location":"http://schema.org/location"},
"@type":"http://schema.org/Organization",
"uri":"http://localhost:8080/kangarooEvents/venue/12",
"name":"Joondalup Library - Ground Floor Meeting Room",
"location":{
"address":"102 Boas Avenue",
"city":"Joondalup",
"zip":"6027",
"country":"Australia",
"state":"WA"},
"@id":12}
Я хочу аннотировать организацию, которая имеет одно местоположение:
@JsonldType("http://schema.org/Organization")
public class Venue {
@JsonldId
private Integer id;
@JsonldProperty("http://schema.org/url")
private String uri;
@JsonldProperty("http://schema.org/name")
private String name;
@JsonSerialize(using = CostumLocationSerializer.class)
@JsonldProperty("http://schema.org/location")
private Location location;
Местоположение:
@JsonldType("http://schema.org/PostalAddress")
public class Location {
@JsonldProperty("http://schema.org/streetAddress")
private String address;
@JsonldProperty("http://schema.org/addressLocality")
private String city;
@JsonldProperty("http://schema.org/addressRegion")
private String state;
@JsonldProperty("http://schema.org/addressRegion")
private String country;
@JsonldProperty("http://schema.org/postalCode")
private String zipcode;
Сериализация:
public class CostumLocationSerializer extends StdSerializer<Location> {
private ObjectMapper mapper = new ObjectMapper();
public CostumLocationSerializer(){
this( null);
}
protected CostumLocationSerializer(Class<Location> t) {
super(t);
}
@Override
public void serialize(Location location, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("address", location.getAddress());
jsonGenerator.writeStringField("city", location.getCity());
jsonGenerator.writeStringField("zip", location.getZipcode());
jsonGenerator.writeStringField("country", location.getCountry());
jsonGenerator.writeStringField("state", location.getState());
jsonGenerator.writeEndObject();
String serialized = mapper.writeValueAsString(location);
}
}
Я думаю, что моя проблема может быть в сериализации, но я не могу понять это.Может быть, кто-то комментирует вложенный объект.и можете сказать мне, в чем моя проблема.