Spring Boot如何查询数据而不返回它?

时间:2017-01-05 22:30:39

标签: spring spring-boot spring-data spring-data-rest

抱歉问这样一个新手问题!

我从Spring Boot的文档中知道,我可以这样做:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
    List<Person> findByLastName(@Param("name") String name);
}

但是如何查询相同的信息,然后对其进行某种逻辑转换,然后再将其返回给客户端?

使用findByLastName,直接返回DB的结果。

2 个答案:

答案 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)

在提出这个问题之后,我随后找到了以下文档,其中概述了如何实现这一目标:

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.overriding-sdr-response-handlers

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;