抱歉问这样一个新手问题!
我从Spring Boot的文档中知道,我可以这样做:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
List<Person> findByLastName(@Param("name") String name);
}
但是如何查询相同的信息,然后对其进行某种逻辑转换,然后再将其返回给客户端?
使用findByLastName,直接返回DB的结果。
答案 0 :(得分:2)
我有类似的问题,据我了解这个问题,我没有方便的解决方案,你这样做。 你必须实现自己的控制器,并在那里解决你的所有逻辑。 查看@RepositoryRestController并使用您自己的逻辑实现您自己的方法。 解决方案我来了
@RestController
@RepositoryRestController
@RequestMapping(value = "/event/")
public class EventController {
@Autowired
EventService eventService;
@RequestMapping(value = "/upcoming", method = RequestMethod.GET)
List<EventProjection> checkIfUserParticipatesUpcoming(@RequestParam(value = "userId") String userId) {
return eventService.checkIfUserParticipatesUpcoming(userId);
}
}
在事件服务中完全实现业务逻辑,就像你在春天一样。
Spring-Data-Rest
对于基本的东西非常棒,但它并不像你希望的那样有弹性。
如果有更好的答案,我也很乐意听到。
*一点点,我是个罪人。返回类型应该是HttpEntity
,具有服务器200/201/204的兼容返回类型,但我刚刚处于开发阶段,尚未投入生产。 *
答案 1 :(得分:0)
在提出这个问题之后,我随后找到了以下文档,其中概述了如何实现这一目标:
public class ScannerController {
private final ScannerRepository repository;
@Autowired
public ScannerController(ScannerRepository repo) {
repository = repo;
}
@RequestMapping(method = GET, value = "/scanners/search/listProducers")
public @ResponseBody ResponseEntity<?> getProducers() {
List<String> producers = repository.listProducers();
//
// do some intermediate processing, logging, etc. with the producers
//
Resources<String> resources = new Resources<String>(producers);
resources.add(linkTo(methodOn(ScannerController.class).getProducers()).withSelfRel());
// add other links as needed
return ResponseEntity.ok(resources);
}
}
注意:您还必须导入以下软件包才能使其正常工作:
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;