为了回答我自己的问题,现在有两种简单的方法可以做到这一点。
您可以默认使SDR存储库查找器返回投影:
public interface PersonRepository extends PagingAndSortingRepository<Person,Long> { Set<PersonProjection> findByLastName(String lastName);}您还可以通过使用@basePathAwareController创建自定义的Spring
MVC控制器,有选择地覆盖SDR默认情况下会为您处理的响应。如果您打算提供分页响应,则需要注入ProjectionFactory以及可能的PagedResourcesAssembler。
@basePathAwareControllerpublic class CustomPersonController {@Autowiredprivate ProjectionFactory factory;@Autowiredprivate PersonRepository personRepository;@Autowiredprivate PagedResourcesAssembler<PersonProjection> assembler;@RequestMapping(value="/persons", method = RequestMethod.GET, produces = "application/hal+json")public ResponseEntity<?> getPeople(Pageable pageable) { Page<Person> people = personRepository.findAll(pageable); Page<PersonProjection> projected = people.map(l -> factory.createProjection(PersonProjection.class, l)); PagedResources<Resource<PersonProjection>> resources = assembler.toResource(projected); return ResponseEntity.ok(resources);}


