Nel nostro Spring-Data-Rest Project abbiamo una ricerca personalizzata (fuzzy) su/buergers/search/findBuergerFuzzy? SearchString = "..." endpoint.Spring Data Rest - Aggiungi collegamento all'endpoint di ricerca
È possibile aggiungere un collegamento per l'endpoint/buergers/search (senza sovrascrivere i metodi findBy del repository esposti automaticamente)?
Il controller di esporre la ricerca:
@BasePathAwareController
@RequestMapping("/buergers/search/")
public class BuergerSearchController {
@Autowired
QueryService service;
@RequestMapping(value = "/findBuergerFuzzy", method = RequestMethod.GET)
public
@ResponseBody
ResponseEntity<?> findBuergerFuzzy(PersistentEntityResourceAssembler assembler, @Param("searchString") String searchString) {
if (searchString.length() < 3)
throw new IllegalArgumentException("Search String must be at least 3 chars long.");
List<Buerger> list = service.query(searchString, Buerger.class, new String[]{"vorname", "nachname", "geburtsdatum", "augenfarbe"});
final List<PersistentEntityResource> collect = list.stream().map(assembler::toResource).collect(Collectors.toList());
return new ResponseEntity<Object>(new Resources<>(collect), HttpStatus.OK);
}
}
Controllare 'resource.getDomainType() 'per assicurarsi che la funzione di ricerca venga visualizzata solo alla risorsa giusta. \t 'if (ResourceClass.class.equals (resource.getDomainType()))' –
La tua soluzione è abbastanza pericolosa, perché stai perdendo la coerenza tra la mappatura del tuo metodo (dove è servito) e il suo collegamento (dove segue la relazione porterà). Dovresti usare i metodi statici 'linkTo' e' methodOn' di Spring Hateoas per evitare che durante la creazione di 'Link' –