@GetMapping(value = "/employees/detailed", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resources<Resource<EmployeeWithManager>>> findAllDetailedEmployees() { return ResponseEntity.ok( employeeWithManagerResourceAssembler.toResources( StreamSupport.stream(repository.findAll().spliterator(), false) .map(EmployeeWithManager::new) .collect(Collectors.toList()))); }
@GetMapping(value = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE) public Resource<Employee> findOne(@PathVariable Long id) { return repository.findById(id) .map(assembler::toResource) .orElseThrow(() -> new RuntimeException("No employee '" + id + "' found")); }
/** * Find an {@link Employee}'s {@link Manager} based upon employee id. Turn it into a context-based link. * * @param id * @return */ @GetMapping(value = "/managers/{id}/employees", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resources<Resource<Employee>>> findEmployees(@PathVariable long id) { return ResponseEntity.ok( assembler.toResources(repository.findByManagerId(id))); }
@DeleteMapping("/employees/{id}") ResponseEntity<?> deleteEmployee(@PathVariable long id) { repository.deleteById(id); return ResponseEntity.noContent().build(); } }
@GetMapping(value = "/employees/{id}/detailed", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resource<EmployeeWithManager>> findDetailedEmployee(@PathVariable Long id) { return repository.findById(id) .map(EmployeeWithManager::new) .map(employeeWithManagerResourceAssembler::toResource) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } }
@GetMapping(value = "/employees", produces = MediaTypes.HAL_JSON_VALUE) public Resources<Resource<Employee>> findAll() { return assembler.toResources(repository.findAll()); }
/** * Use Spring to inject a {@link EmployeeRepository} that can then load data. Since this will run * only after the app is operational, the database will be up. * * @param repository */ @Bean CommandLineRunner init(EmployeeRepository repository) { return args -> { repository.save(new Employee("Frodo", "Baggins", "ring bearer")); repository.save(new Employee("Bilbo", "Baggins", "burglar")); }; }
@GetMapping(value = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resource<Employee>> findOne(@PathVariable Long id) { return repository.findById(id) .map(assembler::toResource) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
@GetMapping(value = "/employees", produces = MediaTypes.HAL_JSON_VALUE) public Resources<Resource<Employee>> findAll() { return assembler.toResources(repository.findAll()); }
/** * Use Spring to inject a {@link EmployeeRepository} that can then load data. Since this will run * only after the app is operational, the database will be up. * * @param repository */ @Bean CommandLineRunner init(EmployeeRepository repository) { return args -> { repository.save(new Employee("Frodo", "Baggins", "ring bearer")); repository.save(new Employee("Bilbo", "Baggins", "burglar")); }; }
/** * Look up a single {@link Employee} and transform it into a REST resource using * {@link EmployeeResourceAssembler#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 = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resource<Employee>> findOne(@PathVariable long id) { return repository.findById(id) .map(assembler::toResource) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
/** * Look up all employees, and transform them into a REST collection resource using * {@link EmployeeResourceAssembler#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 = "/employees", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resources<Resource<Employee>>> findAll() { return ResponseEntity.ok( assembler.toResources(repository.findAll())); }
/** * Use Spring to inject a {@link EmployeeRepository} that can then load data. Since this will run * only after the app is operational, the database will be up. * * @param repository */ @Bean CommandLineRunner init(EmployeeRepository repository) { return args -> { repository.save(new Employee("Frodo", "Baggins", "ring bearer")); repository.save(new Employee("Bilbo", "Baggins", "burglar")); }; }
/** * Look up a single {@link Employee} and transform it into a REST resource using * {@link EmployeeResourceAssembler#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 = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resource<Employee>> findOne(@PathVariable long id) { return repository.findById(id) .map(assembler::toResource) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
/** * Look up all employees, and transform them into a REST collection resource using * {@link EmployeeResourceAssembler#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 = "/employees", produces = MediaTypes.HAL_JSON_VALUE) public ResponseEntity<Resources<Resource<Employee>>> findAll() { return ResponseEntity.ok( assembler.toResources(repository.findAll())); }
@PostMapping("/employees") public ResponseEntity<Resource<Employee>> newEmployee(@RequestBody Employee employee) { Employee savedEmployee = repository.save(employee); return ResponseEntity .created(savedEmployee.getId() .map(id -> linkTo(methodOn(EmployeeController.class).findOne(id)).toUri()) .orElseThrow(() -> new RuntimeException("Failed to create for some reason"))) .body(assembler.toResource(savedEmployee)); }
/** * Look up a single {@link Employee} and transform it into a REST resource. 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 = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE) ResponseEntity<Resource<Employee>> findOne(@PathVariable long id) { return repository.findById(id) .map(employee -> new Resource<>(employee, linkTo(methodOn(EmployeeController.class).findOne(employee.getId())).withSelfRel(), linkTo(methodOn(EmployeeController.class).findAll()).withRel("employees"))) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
/** * Look up all employees, and transform them into a REST collection resource. * 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 = "/employees", produces = MediaTypes.HAL_JSON_VALUE) ResponseEntity<Resources<Resource<Employee>>> findAll() { List<Resource<Employee>> employees = StreamSupport.stream(repository.findAll().spliterator(), false) .map(employee -> new Resource<>(employee, linkTo(methodOn(EmployeeController.class).findOne(employee.getId())).withSelfRel(), linkTo(methodOn(EmployeeController.class).findAll()).withRel("employees"))) .collect(Collectors.toList()); return ResponseEntity.ok( new Resources<>(employees, linkTo(methodOn(EmployeeController.class).findAll()).withSelfRel())); }