Update for Spring Boot 2.0

This commit is contained in:
Greg Turnquist
2017-11-24 22:18:49 -06:00
parent a76e708613
commit a8306629cc
17 changed files with 138 additions and 58 deletions

View File

@@ -15,14 +15,16 @@
*/
package org.springframework.hateoas.examples;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Optional;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.hateoas.Identifiable;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -53,4 +55,8 @@ class Employee implements Identifiable<Long> {
this.role = role;
this.manager = manager;
}
public Optional<Long> getId() {
return Optional.ofNullable(this.id);
}
}

View File

@@ -71,8 +71,11 @@ class EmployeeController {
*/
@GetMapping(value = "/employees/{id}", produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity<Resource<Employee>> findOne(@PathVariable long id) {
return ResponseEntity.ok(
assembler.toResource(repository.findOne(id)));
return repository.findById(id)
.map(assembler::toResource)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
/**
@@ -100,10 +103,10 @@ class EmployeeController {
@GetMapping(value = "/employees/{id}/detailed", produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity<Resource<EmployeeWithManager>> findDetailedEmployee(@PathVariable Long id) {
Employee employee = repository.findOne(id);
return ResponseEntity.ok(
employeeWithManagerResourceAssembler.toResource(
new EmployeeWithManager(employee)));
return repository.findById(id)
.map(EmployeeWithManager::new)
.map(employeeWithManagerResourceAssembler::toResource)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
}

View File

@@ -47,12 +47,15 @@ class EmployeeResourceAssembler extends SimpleIdentifiableResourceAssembler<Empl
*/
super.addLinks(resource);
// Add additional links
resource.add(linkTo(methodOn(ManagerController.class).findManager(resource.getContent().getId())).withRel("manager"));
resource.add(linkTo(methodOn(EmployeeController.class).findDetailedEmployee(resource.getContent().getId())).withRel("detailed"));
resource.getContent().getId()
.ifPresent(id -> {
// Add additional links
resource.add(linkTo(methodOn(ManagerController.class).findManager(id)).withRel("manager"));
resource.add(linkTo(methodOn(EmployeeController.class).findDetailedEmployee(id)).withRel("detailed"));
// Maintain a legacy link to support older clients not yet adjusted to the switch from "supervisor" to "manager".
resource.add(linkTo(methodOn(SupervisorController.class).findOne(resource.getContent().getId())).withRel("supervisor"));
// Maintain a legacy link to support older clients not yet adjusted to the switch from "supervisor" to "manager".
resource.add(linkTo(methodOn(SupervisorController.class).findOne(id)).withRel("supervisor"));
});
}
/**

View File

@@ -33,7 +33,9 @@ public class EmployeeWithManager {
private final Employee employee;
public Long getId() {
return this.employee.getId();
return this.employee.getId()
.orElseThrow(() -> new RuntimeException("Couldn't find anything."));
}
public String getName() {

View File

@@ -15,17 +15,18 @@
*/
package org.springframework.hateoas.examples;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.hateoas.Identifiable;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -52,4 +53,8 @@ class Manager implements Identifiable<Long> {
Manager(String name) {
this.name = name;
}
public Optional<Long> getId() {
return Optional.ofNullable(this.id);
}
}

View File

@@ -65,8 +65,11 @@ class ManagerController {
*/
@GetMapping(value = "/managers/{id}", produces = MediaTypes.HAL_JSON_VALUE)
ResponseEntity<Resource<Manager>> findOne(@PathVariable long id) {
return ResponseEntity.ok(
assembler.toResource(repository.findOne(id)));
return repository.findById(id)
.map(assembler::toResource)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
/**

View File

@@ -44,8 +44,11 @@ class ManagerResourceAssembler extends SimpleIdentifiableResourceAssembler<Manag
*/
super.addLinks(resource);
// Add custom link to find all managed employees
resource.add(linkTo(methodOn(EmployeeController.class).findEmployees(resource.getContent().getId())).withRel("employees"));
resource.getContent().getId()
.ifPresent(id -> {
// Add custom link to find all managed employees
resource.add(linkTo(methodOn(EmployeeController.class).findEmployees(id)).withRel("employees"));
});
}
/**

View File

@@ -15,11 +15,11 @@
*/
package org.springframework.hateoas.examples;
import lombok.Value;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Value;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@@ -37,7 +37,9 @@ class Supervisor {
private final Manager manager;
public Long getId() {
return this.manager.getId();
return this.manager.getId()
.orElseThrow(() -> new RuntimeException("Couldn't find anything"));
}
public String getName() {