5
在我們的Spring-Data-Rest項目中,我們對/ buergers/search/findBuergerFuzzy?searchString =「...」端點進行了自定義(模糊)搜索。Spring Data Rest - 添加鏈接到搜索端點
是否可以在/ buergers/search端點上添加一個鏈接(不覆蓋自動公開的Repository findBy方法)?
的控制器暴露的搜索:
@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);
}
}
您應該檢查'resource.getDomainType()'以確保您的搜索功能只顯示在正確的資源。 \t'if(ResourceClass.class.equals(resource.getDomainType()))' –
你的解決方案是相當危險的,因爲你的方法映射(它在哪裏服務)和它的鏈接該關係將導致)。你應該使用來自Spring Hateoas的'linkTo'和'methodOn'靜態方法來避免當你創建'Link'時 –