【问题标题】:How to conditionally expose data in Spring Data REST projection?如何在 Spring Data REST 投影中有条件地公开数据?
【发布时间】:2015-01-25 14:08:42
【问题描述】:

有一个投影UserProjectionUser 表有字段 - enable_email,一个布尔值。

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

    String getEmail();
}

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

  1. 如何将摘要投影配置为仅在enable_emailtrue 时才返回电子邮件?

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

【问题讨论】:

    标签: spring spring-data spring-data-rest


    【解决方案1】:

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

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

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

    然后,我创建了一个带有组件注释的 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;
    
        }
    

    【讨论】:

    • 如果您可以回答是否仅从用户实例中公开电子邮件地址的问题,您甚至可以将 SpEL 表达式简化为#{target.exposeEmail() ? target.email : null}
    • 那么,你周围的班级是@Component public class userUtil {},还是什么?
    猜你喜欢
    • 2016-01-20
    • 2017-07-27
    • 1970-01-01
    • 2018-04-18
    • 2015-02-05
    • 2016-03-23
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多