我正在尝试将大型 Map> 转换为一些 JavaBean。map 的 key 对应于 JavaBean 的某个属性,而 value 则以某种方式被解码为属性值。所以我决定为此使用一些实用程序,但不知道什么会起作用。我对这个工具(或框架)有一些要求:
- 所有配置必须在单独的文件中
应该可以映射动态数量的键:有一个映射:
关键 | 价值
权| n
键_1| 值_1
键_2| value_2
........ | .............
key_n| 值_n
其中 n - 是任意数字,JavaBean 有一个包含一些 bean 的列表。他们有财产。value_1, value_2, ... 必须映射到这个属性中,最后list里肯定有这么多bean,就像map里的这些key和value一样。
3..应该可以为属性映射设置自定义解码器,因为在大多数情况下,map中的值是一个值为1的List,所以我需要获取列表的第一项(如果它不为空)。
4..应该有可能运行一些脚本来执行特殊的映射,例如:有一个映射,在 2d 点中描述。JavaBean 有一个 HashMap 类型的属性,其中 value_1 映射到 Bean1,输入映射中的一些类似值映射到 Bean2。
我尝试过使用 smooks,但是当我开始使用时,所有这些要求还不清楚,而且 smooks 是新事物,我直到现在才使用它。所以 smooks 配置不包含整个业务逻辑(因为第二个要求)并且看起来很丑,我不喜欢那样。我可以展示 2d 点最丑陋的片段:
<jb:bean beanId="javaBean" class="com.example.JavaBean" createOnElement="map">
<jb:wiring property="someBeans" beanIdRef="someBeanItems"/>
</jb:bean>
<jb:bean beanId="someBeanItems" class="java.util.ArrayList" createOnElement="map/entry">
<jb:wiring beanIdRef="someBeanItem"/>
</jb:bean>
<jb:bean beanId="someBeanItem" class="com.example.someBeanItem" createOnElement="map/entry">
<condition>map.quan[0]>0</condition>
<jb:expression property="property1">
index = map.quan[0]-1;
value = additionalProperties.property1_List[index];
map.quan[0] = map.quan[0] - 1;
return value;
</jb:expression>
</jb:bean>
这里“property1_List”是在执行 smooks 之前构建的。
现在我在寻找更好的东西,需要你的帮助:也许你知道如何使用 smooks 来改善它?或者您可以为我的问题推荐哪些其他映射框架?