2017-12-27 162 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

我認爲這對我來說並不好,因爲你的解決方案忽略了他沒有權利的字段,所以我們需要發送不同的請求。但是我希望擁有所有信息的同一請求,後端將測試他是否沒有權利,我們不能使用他的價值,並且需要從數據庫中獲取舊值以避免修改它。 –