2017-12-27 462 views
0

我可以在界面Mapper.java中添加一个新属性,如nullValueCheckStrategy以检查权限吗?Java - MapStruct:Mapper的自定义属性,如`nullValueCheckStrategy`

如果我添加了nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS Code Generates将为每个字段添加if(filed != null)

而且我想要一个如果过于喜欢if(rightService.hasRole("Admin") { ... }以避免更新没有权限的用户的值。

这是我第一次在这里问一个问题,我希望能得到一些答案,非常感谢。

回答

2

这是目前不支持。但是,您可以通过编写自定义映射器并为您拥有的不同角色提供不同的方法来实现这一点。您的映射器可能如下所示:

@Mapper 
public abstract class MyMapper { 

    private MyService service; 

    public void update(Target target, Source source) { 
     if (service.hasRole("Admin")) { 
      updateForAdmin(target, source); 
     } else if (service.hasRole("X")) { 
      updateForX(target, source); 
     } 
    } 


    //Mappings for Admin, ignore those that he/she has no rights 
    protected abstract updateForAdmin(@MappingTarget Target target, Source source); 

    //Mappings for X, ignore those that he/she has no rights 
    protected abstract updateForX(@MappingTarget Target target, Source source); 

    //setter injection 
} 

基本思想是您为每个角色提供适当映射的方法。 mapper有一个公共方法,其余的只是MapStruct的实现。

+0

谢谢,我会尝试。 –

+0

如果它适合你,你可以接受答案。否则,让我知道,我可以更新它 – Filip

+0

我认为这对我来说并不好,因为你的解决方案忽略了他没有权利的字段,所以我们需要发送不同的请求。但是我希望拥有所有信息的同一请求,后端将测试他是否没有权利,我们不能使用他的价值,并且需要从数据库中获取旧值以避免修改它。 –