如何在Spring Data REST投影中有条件地公开数据?

for*_*rtm 4 spring spring-data spring-data-rest

有一个投影UserProjection,User表有字段 - enable_email布尔值.

@Projection(name = "summary", types = User.class)
public interface UserSummaryProjection {

    String getEmail();
}
Run Code Online (Sandbox Code Playgroud)

访问URL /app/users/{id}?projection=summary按预期显示电子邮件

  1. 如何总结投影配置为返回的电子邮件仅enable_emailtrue

  2. 该配置是否仅影响此预测或适用于User实体的所有预测?

for*_*rtm 6

我得到了这个工作,并将发布答案 -

在投影中,只需要使用Spring bean和方法名称对@Value进行注释,如下所示 -

@Value("#{@userUtil.manageEmail(target)}")
String getEmail();
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个使用Component注释注释的Spring Bean,并添加了如下方法

public String manageEmail(User user) {

        Profile profile = profileRepo.findByUser(user);
        String[] paramsEnabled = profile.getSettings().split(",");
        boolean emailAllowed = Arrays.stream(paramsEnabled).anyMatch((s) -> (s.equals(Constants.EMAIL_ENABLED)));

        return  emailAllowed ? user.getEmail() : null;

    }
Run Code Online (Sandbox Code Playgroud)