我目前正在使用Spring Boot创建具有mongodb后端的REST API。是否可以仅在查看特定项目时显示某些字段,而不显示项目列表?
例如,当查看用户列表时,仅公开电子邮件,名称和ID:
GET /{endpoint}/users
{ "_embedded": { "users": [ { "email": "some_email@gmail.com", "name": "some name", "id": "57420b2a0d31bb6cef4ee8e9" }, { "email": "some_other_email@gmail.com", "name": "some other name", "id": "57420f340d31cd8a1f74a84e" } ] }
但是在搜索特定用户时,请显示其他字段,例如地址和性别:
GET /{endpoint}/users/57420f340d31cd8a1f74a84e
{ "email": "some_other_email@gmail.com", "name": "some other name", "address": "1234 foo street" "gender": "female" "id": "57420f340d31cd8a1f74a84e" }
给定一个用户类:
public class User { private String id; private String email; private String address; private String name; private String gender; ... }
使用Spring Data REST时,为此专门设计了一些东西。带有投影和摘录的概念,您可以指定要返回的内容和方式。
首先,您将创建一个仅包含所需字段的接口。
@Projection(name="personSummary", types={Person.class}) public interface PersonSummary { String getEmail(); String getId(); String getName(); }
然后将其PersonRepository添加为默认使用(仅适用于返回集合的方法!)。
PersonRepository
@RepositoryRestResource(excerptProjection = PersonSummary.class) public interface PersonRepository extends CrudRepository<Person, String> {}
然后,在查询集合时,您将仅获得投影中指定的字段,而在获取单个实例时,将获取完整的对象。