小编典典

仅在使用Spring Data查看特定项目时才公开某些字段?

spring-boot

我目前正在使用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;

...
}

阅读 332

收藏
2020-05-30

共1个答案

小编典典

使用Spring Data REST时,为此专门设计了一些东西。带有投影和摘录的概念,您可以指定要返回的内容和方式。

首先,您将创建一个仅包含所需字段的接口。

@Projection(name="personSummary", types={Person.class})
public interface PersonSummary {
    String getEmail();
    String getId();
    String getName();
}

然后将其PersonRepository添加为默认使用(仅适用于返回集合的方法!)。

@RepositoryRestResource(excerptProjection = PersonSummary.class)
public interface PersonRepository extends CrudRepository<Person, String> {}

然后,在查询集合时,您将仅获得投影中指定的字段,而在获取单个实例时,将获取完整的对象。

2020-05-30