How does one add @type to nested object. Example source code below
@Test
public void testBreadCrumbJsonLD() throws IOException {
BreadCrumbListItem allTicket = new BreadCrumbListItem("All Tickets", "http://www.ticketmaster.com/");
BreadCrumbListItem musicTicket = new BreadCrumbListItem("Music Tickets", "http://www.ticketmaster.com/section/concerts");
BreadCrumbList breadCrumbList = new BreadCrumbList(
Arrays.asList(
new BreadCrumbListItemWrapper(1, allTicket),
new BreadCrumbListItemWrapper(2, musicTicket)
));
JsonldResourceBuilder builder = JsonldResource.Builder.create();
builder.context("http://schema.org");
objectMapper.writer().writeValue(System.out, builder.build(breadCrumbList));
}
@JsonldType("BreadcrumbList")
class BreadCrumbList {
private final List<BreadCrumbListItemWrapper> itemListElement;
public BreadCrumbList(List itemListElement) {
this.itemListElement = itemListElement;
}
public List<BreadCrumbListItemWrapper> getItemListElement() {
return itemListElement;
}
}
@JsonldType("ListItem")
class BreadCrumbListItemWrapper {
@JsonldProperty("position")
private int position;
@JsonldProperty("item")
private BreadCrumbListItem item;
BreadCrumbListItemWrapper(int position, BreadCrumbListItem item) {
this.position = position;
this.item = item;
}
public BreadCrumbListItem getItem() {
return item;
}
public int getPosition() {
return position;
}
}
class BreadCrumbListItem {
@JsonldProperty("name")
private String name;
@JsonldId
private String id;
public BreadCrumbListItem(String id, String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
}
Expected
{
"@context":"http://schema.org",
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"http://www.ticketmaster.com/",
"name":"All Tickets"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"http://www.ticketmaster.com/section/concerts",
"name":"Music Tickets "
}
}
]
}
Actual
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"position": 1,
"item": {
"name": "All Tickets",
"@id": "http://www.ticketmaster.com/"
}
},
{
"position": 2,
"item": {
"name": "Music Tickets",
"@id": "http://www.ticketmaster.com/section/concerts"
}
}
]
}
Object Mapper Configuration
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.registerModule(new JsonldModule(Collections::emptyList));
How does one add
@typeto nested object. Example source code belowExpected
{ "@context":"http://schema.org", "@type":"BreadcrumbList", "itemListElement":[ { "@type":"ListItem", "position":1, "item":{ "@id":"http://www.ticketmaster.com/", "name":"All Tickets" } }, { "@type":"ListItem", "position":2, "item":{ "@id":"http://www.ticketmaster.com/section/concerts", "name":"Music Tickets " } } ] }Actual
{ "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "position": 1, "item": { "name": "All Tickets", "@id": "http://www.ticketmaster.com/" } }, { "position": 2, "item": { "name": "Music Tickets", "@id": "http://www.ticketmaster.com/section/concerts" } } ] }Object Mapper Configuration