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

4

有一个投影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实体的所有投影?

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;

    }

1
如果你能回答这个问题,即是否仅从用户实例中公开电子邮件地址,那么你甚至可以将SpEL表达式简化为#{target.exposeEmail() ? target.email : null} - Oliver Drotbohm
那么,你的周围类是@Component public class userUtil {},还是其他什么? - membersound

-1
这里是Spring文档示例图片

enter image description here

你可以使用@Value注解为复杂逻辑创建一个@Component
@Component
class MyBean {

  String getFullName(Person person) {
    …
  }
}

interface NamesOnly {

  @Value("#{@myBean.getFullName(target)}")
  String getFullName();
  …
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接