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

问题描述 投票:0回答:2

有一个投影

UserProjection
并且
User
表有字段 -
enable_email
,一个布尔值。

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

    String getEmail();
}

访问 URL

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

  1. 如何配置摘要投影以仅在

    enable_email
    true
    时才返回电子邮件?

  2. 该配置仅影响此投影还是适用于

    User
    实体的所有投影?

spring spring-data spring-data-rest
2个回答
6
投票

我成功了并将发布答案 -

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

@Value("#{@userUtil.manageEmail(target)}")
String getEmail();

然后,我创建了一个带有 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;

    }

0
投票

这是 Spring 的文档 https://docs.spring.io/spring-data/jpa/reference/3.2/repositories/projections.html enter image description here

您可以创建带有@Value注解的@Component来实现复杂的逻辑

© www.soinside.com 2019 - 2024. All rights reserved.