W naszym Spring-Data-Rest Project mamy niestandardowe (rozmyte) wyszukiwanie na punkcie końcowym/buergers/search/findBuergerFuzzy? SearchString = "...".Spring Data Rest - Dodaj link do wyszukiwania w punkcie końcowym
Czy można dodać łącze do niego w punkcie końcowym/buergers/search (bez przesłonięcia automatycznie wyeksponowanych metod FindBy repozytorium)?
Kontroler wystawiając wyszukiwania:
@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);
}
}
Należy sprawdzić 'resource.getDomainType()', aby upewnić się, że funkcja wyszukiwania wyświetla się tylko we właściwym zasobie. \t 'if (ResourceClass.class.equals (resource.getDomainType()))' –
Twoje rozwiązanie jest dość niebezpieczne, ponieważ tracisz spójność między mapowaniem swojej metody (gdzie jest ona obsługiwana) a jej łączeniem (gdzie relacja będzie prowadzić). Powinieneś używać metod statycznych 'linkTo' i' methodOn' ze Spring Hateoas, aby tego uniknąć podczas tworzenia 'Link' –