簡體   English   中英

Orika嵌套屬性展平

[英]Orika nested properties flattening

我需要將n級深度結構展平為單級對象屬性的幫助。 約定是使用下划線字符(level1_level2_level3)。 我正在使用orika( http://orika-mapper.github.io/orika-docs/index.html

例如。

Variable1.Property1.Property2.Property3

其中Property1為Set,Property2為類,Property3為String。

使用以下設置可以在orika中實現我所需的映射:

.field("Property1{Property2.Property3}", "Property1_Property2_Property3")

問題是我需要通用的解決方案,可以深度達到n級。 如果類型是列表/集合,那么我只會采用第一個元素(如果列表/集合不為空)。

這是我要實現的目標:

Class1 {

String property1;
Set<Class2> property2;

}

Class2 {

String property3;
Class3 property4;

}

Class3 {

String property5;    

}



MapHere {

String property1;
String property2_property3;
String property2_property4_property5;

}

更新:

如果有人需要,這是FlattenClassMapBuilder的實現: http ://pastie.org/9324242

而且,按包映射:

    String aPrefix = "com.something.domain";
    String bPrefix = "com.something.dto";

    //----------------------
    Reflections reflections = new Reflections(aPrefix, new SubTypesScanner(false));
    //uzmi sve klase iz paketa koji je dat u aPrefix putanji (recimo "com.nesto.nesto1")
    Set<Class<?>> aClasses = reflections.getSubTypesOf(Object.class);
    reflections = new Reflections(bPrefix, new SubTypesScanner(false));
    //uzmi sve klase iz paketa koji je dat u bPrefix putanji (recimo "com.nesto.nesto2")
    Set<Class<?>> bClasses = reflections.getSubTypesOf(Object.class);
    for(Class<?> aClass : aClasses)
    {
        for(Class<?> bClass : bClasses)
        {
            if(aClass.getSimpleName().equals(bClass.getSimpleName()))
            {
                //za sve klase iz aPrefix-a cije se ime poklapa sa klasom iz bPrefix-a
                mapperFactory.classMap(aClass, bClass).byDefault().register();
            }
        }
    }
    //------------------------

實際上,Orika可以處理此問題,但是您應該通過提供DefaultFieldMapper的實現來提供此自動映射策略。

在Orika源代碼/測試中,有一些示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM