/** * Look up all managers, and transform them into a REST collection resource using * {@link ManagerResourceAssembler#toResources(Iterable)}. Then return them through * Spring Web's {@link ResponseEntity} fluent API. * * NOTE: cURL will fetch things as HAL JSON directly, but browsers issue a different * default accept header, which allows XML to get requested first, so "produces" * forces it to HAL JSON for all clients. */ @GetMapping(value = "/managers", produces = MediaTypes.HAL_JSON_VALUE) ResponseEntity<Resources<Resource<Manager>>> findAll() { return ResponseEntity.ok( assembler.toResources(repository.findAll())); }
/** * Find an {@link Employee}'s {@link Manager} based upon employee id. Turn it into a context-based link. * * @param id * @return */ @GetMapping(value = "/employees/{id}/manager", produces = MediaTypes.HAL_JSON_VALUE) ResponseEntity<Resource<Manager>> findManager(@PathVariable long id) { return ResponseEntity.ok( assembler.toResource(repository.findByEmployeesId(id))); } }
/** * Look up a single {@link Manager} and transform it into a REST resource using * {@link ManagerResourceAssembler#toResource(Object)}. Then return it through * Spring Web's {@link ResponseEntity} fluent API. * * See {@link #findAll()} to explain {@link GetMapping}'s "produces" argument. * * @param id */ @GetMapping(value = "/managers/{id}", produces = MediaTypes.HAL_JSON_VALUE) ResponseEntity<Resource<Manager>> findOne(@PathVariable long id) { return repository.findById(id) .map(assembler::toResource) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
@Bean CommandLineRunner initDatabase(EmployeeRepository employeeRepository, ManagerRepository managerRepository) { return args -> { /* * Gather Gandalf's team */ Manager gandalf = managerRepository.save(new Manager("Gandalf")); Employee frodo = employeeRepository.save(new Employee("Frodo", "ring bearer", gandalf)); Employee bilbo = employeeRepository.save(new Employee("Bilbo", "burglar", gandalf)); gandalf.setEmployees(Arrays.asList(frodo, bilbo)); managerRepository.save(gandalf); /* * Put together Saruman's team */ Manager saruman = managerRepository.save(new Manager("Saruman")); Employee sam = employeeRepository.save(new Employee("Sam", "gardener", saruman)); saruman.setEmployees(Arrays.asList(sam)); managerRepository.save(saruman); }; } }