Skip to content

@type in nested object. #4

@adilfulara

Description

@adilfulara

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));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions