可以为ClassData和ClassWsDTO自定义映射器-Hybris-YCommerceWebServices

时间:2018-09-20 14:52:02

标签: web-services mapping customization dto hybris

我在数据类中有一个对象,并且我只希望WsDTO类中该对象的特定属性。

自定义B2BUnitData的声明

<bean class="de.hybris.platform.b2bcommercefacades.company.data.B2BUnitData">
 <property name="PointOfServiceData"
 type="de.hybris.platform.commercefacades.storelocator.data.PointOfServiceData"/>
</bean>

B2bUnitWsDTO的声明

<bean class="de.hybris.platform.b2boccaddon.dto.b2bunit.B2bUnitWsDTO">
    <property name="PointOfServiceData" type="PointOfServiceWsDTO" />
</bean>

file:dto-level-mappings-v2-spring.xml

 <bean parent="fieldSetLevelMapping" id="b2bunitWsDTOFieldSetLevelMapping">
    <property name="dtoClass"
              value="de.hybris.platform.b2boccaddon.dto.pricerow.B2bUnitWsDTO"/>
    <property name="levelMapping">
        <map>
            <entry key="FULL" value="PointOfServiceData" />
        </map>
    </property>
</bean>

此实现为我提供了所有对象pointOfService,但我只想要B2bUnitWsDTO中的UID属性

我知道的唯一解决方案是在数据中创建PointOfServiceUID属性,并将其直接映射到b2bunitWsDTOFieldSetLevelMapping bean中。

我会知道是否有可能在dto-level-mappings-v2-spring.xml中仅映射对象的一个​​属性:

示例:

或者,如果有解决方案,可以这样做

1 个答案:

答案 0 :(得分:2)

正如您已经提到的,您可以更改dto-level-mappings-v2-spring.xml,以便对于所有级别(BASICDEFAULTFULL)仅返回uid。

<bean parent="fieldSetLevelMapping" id="b2bunitWsDTOFieldSetLevelMapping">
    <property name="dtoClass"
              value="de.hybris.platform.b2boccaddon.dto.pricerow.B2bUnitWsDTO"/>
    <property name="levelMapping">
        <map>
            <entry key="BASIC" value="PointOfServiceData(uid)" />
            <entry key="DEFAULT" value="PointOfServiceData(uid)" />
            <entry key="FULL" value="PointOfServiceData(uid)" />
        </map>
    </property>
</bean>

当心,fieldSetLevelMapping Bean仅定义您的响应的样子!

如果要更改将B2BUnitData映射到B2bUnitWsDTO的方式,则必须定义一个自定义字段映射器(可以在dto-mappings-v2-spring.xml中找到示例)

假设您的B2bUnitWsDTO现在仅具有pointOfServiceUID作为属性,则可能看起来像这样(免责声明:您需要对此进行测试):

    <bean id="b2bUnitFieldMapper" parent="fieldMapper">
    <property name="sourceClass"
              value="de.hybris.platform.b2bcommercefacades.company.data.B2BUnitData"/>
    <property name="destClass"
              value="com.customer.some.package.B2bUnitWsDTO"/>
    <property name="fieldMapping">
        <map>
            <entry key="PointOfServiceData.uid" value="pointOfServiceUID"/>
        </map>
    </property>
</bean>

这里是有关字段映射和字段级别定义的很好的文档入口点: https://help.hybris.com/1808/hcd/8c404c5886691014a48c88f4a49f9bf3.html