Как исключить нулевые значения при преобразовании объекта в json

Я работаю с MuleSoft Anypoint Studio, и мне нужно преобразовать полезную нагрузку JSON в XML в конце. Во время этого преобразования необходимо исключить каждое поле, которое имеет значение NULL. Некоторые значения не отправляются через запрос POST, и я ожидаю, что не увижу их в конечном результате - файле XML, но это не тот случай, поскольку они есть. Например, в запросе JSON POST поле Value не отправляется, которое становится нулевым в Mule, поэтому оно не должно отображаться в файле XML, но по-прежнему записывается в нем как <Value/>. У меня в основном проблемы с Object to JSON трансформатором.

Я пробовал настроить кастомный маппер

 <spring:beans>
     <spring:bean id="Bean" name="NonNullMapper" class="org.codehaus.jackson.map.ObjectMapper">
         <spring:property name="SerializationInclusion">
            <spring:value type="org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion">NON_NULL</spring:value>
         </spring:property>
     </spring:bean>

But that didn't really work. I also tried

<spring:beans>
     <spring:bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
     <spring:bean
         class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
         <spring:property name="targetObject" ref="jacksonObjectMapper" />
         <spring:property name="targetMethod" value="configure" />
         <spring:property name="arguments">
             <spring:list>
                 <spring:value>WRITE_NULL_MAP_VALUES</spring:value>
                 <spring:value>false</spring:value>
             </spring:list>
         </spring:property>
     </spring:bean>
 </spring:beans>

Это тоже не сработало, так как я получаю сообщение об ошибке, которое мне не удалось исправить.

More than one object of type class org.codehaus.jackson.map.ObjectMapper registered but only one expected

Я работаю с

  • Мул 3.9.0
  • Anypoint Studio 6.4
  • com.fasterxml.jackson и кое-где org.codehaus.jackson

Я был бы очень признателен за любую помощь или подсказку.


person Tomeister    schedule 14.09.2018    source источник


Ответы (1)


Учитывая, что это в Mule, вы можете использовать DataWeave вместо этого для преобразования полезной нагрузки. Установка свойства записи XML skipNullOn может дать желаемый результат. https://docs.mulesoft.com/mule-user-guide/v/3.9/dataweave-formats#skip-null-on.

Пример

%output application/xml skipNullOn="payload"
---
payload
person aled    schedule 17.09.2018