@RequestMapping("range") @ResponseBody public List<ItemPresentation> get(@RequestParam String from, @RequestParam String to) { Item item = itemDao.getByNumber(from); notNull(item, format("Item `%s` not found", from)); notNull(itemDao.getByNumber(to), format("Item `%s` not found", to)); List<ItemPresentation> items = new ArrayList<ItemPresentation>(); final ItemPresentation itemPresentation = new ItemPresentation(item); // itemPresentation.parents = getParents(item.getNumber()); items.add(itemPresentation); while (!item.getNumber().equals(to)) { item = itemDao.get(item.getNext()); items.add(new ItemPresentation(item)); if (items.size() > MAXIMUM_RANGE_SIZE) { throw new RuntimeException(format("Maximum range size reached (from %s to %s)", from, to)); } } return items; }