/** * Returns a {@code LinkExtractor} capable of extracting links in Atom format where * the links are found in an array named {@code links}. For example: * * <pre> * { * "links": [ * { * "rel": "self", * "href": "http://example.com/foo" * } * ] * } * </pre> * @return the extractor for Atom-style links */ public static LinkExtractor atomLinks() { return new AtomLinkExtractor(); }
@Override public Map<String, List<Link>> extractLinks(Map<String, Object> json) { MultiValueMap<String, Link> extractedLinks = new LinkedMultiValueMap<>(); Object possibleLinks = json.get("links"); if (possibleLinks instanceof Collection) { Collection<Object> linksCollection = (Collection<Object>) possibleLinks; for (Object linkObject : linksCollection) { if (linkObject instanceof Map) { Link link = maybeCreateLink((Map<String, Object>) linkObject); maybeStoreLink(link, extractedLinks); } } } return extractedLinks; }
ContentTypeLinkExtractor() { this.linkExtractors.put(MediaType.APPLICATION_JSON, new AtomLinkExtractor()); this.linkExtractors.put(HalLinkExtractor.HAL_MEDIA_TYPE, new HalLinkExtractor()); }
@Parameters(name = "{1}") public static Collection<Object[]> data() { return Arrays.asList(new Object[] { new HalLinkExtractor(), "hal" }, new Object[] { new AtomLinkExtractor(), "atom" }); }