Можно настроить сопоставление для ClassData и ClassWsDTO - Hybris - YCommerceWebServices - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть объект в моем классе данных, и я хочу только определенный атрибут этого объекта в классе 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, но мне нужен только атрибут UID в B2bUnitWsDTO

Единственное решение, которое я знаю, - создать атрибут PointOfServiceUID в данных и отобразить его непосредственно в bean-компоненте b2bunitWsDTOFieldSetLevelMapping.

Я бы знал, возможно ли отобразить в dto-level-mappings-v2-spring.xml только один атрибут моего объекта:

Пример:

Или, если существует какое-то решение, сделать это

1 Ответ

0 голосов
/ 21 сентября 2018

Как вы уже упоминали, вы можете изменить dto-level-mappings-v2-spring.xml, чтобы для всех уровней (BASIC, DEFAULT, FULL) возвращался только идентификатор пользователя.

<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

...