Ich möchte einen REST-Link für eine Employee
Einheit erstellen, die im Grunde eine findByAllFields
Abfrage sein wird. Natürlich sollte dies mit Page
und Sort
kombiniert werden. Um das zu tun, dass ich den folgenden Code implementiert haben:Spring Data REST benutzerdefinierte Abfrage Integration
@Entity
public class Employee extends Persistable<Long> {
@Column
private String firstName;
@Column
private String lastName;
@Column
private String age;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date hiringDate;
}
So würde ich können eine Abfrage haben möchte sagen, wo ich tun kann:
http://localhost:8080/myApp/employees/search/all?firstName=me&lastName=self&ageFrom=20&ageTo=30&hiringDateFrom=12234433235
So habe ich die folgende Repository
@RepositoryRestResource(collectionResourceRel="employees", path="employees")
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long>,
JpaSpecificationExecutor<Employee> {
}
Ok, so jetzt brauche ich eine RestController
@RepositoryRestController
public class EmployeeSearchController {
@Autowired
private EmployeeRepository employeRepository;
@RequestMapping(value = "/employees/search/all/search/all", method = RequestMethod.GET)
public Page<Employee> getEmployees(EmployeeCriteria filterCriteria, Pageable pageable) {
//EmployeeSpecification uses CriteriaAPI to form dynamic query with the fields from filterCriteria
Specification<Employee> specification = new EmployeeSpecification(filterCriteria);
return employeeRepository.findAll(specification, pageable);
}
Ok, offensichtlich tut dies seine Arbeit, aber ist nicht mit HATEOAS integriert.
public PagedResources<Resource<Employee>> getEmployees(
PagedResourcesAssembler<Employee> assembler,
EmployeeCriteria filterCriteria, Pageable pageable) {
//EmployeeSpecification uses CriteriaAPI to form dynamic query with the fields from filterCriteria
Specification<Employee> specification = new EmployeeSpecification(filterCriteria);
Page<Employee> employees = employeeRepository.findAll(specification, pageable);
return assembler.toResource(employees);
}
Offensichtlich etwas von oben fehlt mir da es nicht funktioniert und ich erhalte die folgende Ausnahme:: Ich habe eine Ressource Ändern der Controller dazu zu montieren versucht
Could not instantiate bean class [org.springframework.data.web.PagedResourcesAssembler]: No default constructor found;
Ok, um die Frage klar zu machen Ich versuche, die obige Ressource in den Rest der HATEOAS-Architektur zu integrieren. Ich bin mir nicht ganz sicher, ob dies der richtige Ansatz ist, daher sind alle anderen Vorschläge willkommen.
EDIT: Hier können Sie eine ähnliche Implementierung sehen. Bitte schauen Sie sich die Konfiguration an, Sie werden sehen, dass alle außer einem der "Person" Controller arbeiten. https://github.com/cgeo7/spring-rest-example
wenn Sie einfaches Github-Projekt für das Problem zu schaffen, wäre es einfacher, Ihr Problem zu finden ... weil es keine genügenden Informationen ist - Ihre Konfigurationen, Abhängigkeiten und etc –
ich die Verzögerung entschuldigen. Ich habe ein kleines ähnliches Projekt erstellt, das alle Schwierigkeiten widerspiegelt, die ich habe https://github.com/cgeo7/spring-rest-example – ChrisGeo
@ChrisGeo und @ Stackee007, stört es Sie schrecklich, wenn ich Sie frage, wie Sie Ihre 'EmployeeCriteria definieren 'und' EmployeeSpecification' Klassen? – BalRog