Конфигурация XStream JavaBeanConverter Spring для сериализации с использованием геттера

Я хотел бы зарегистрировать XStream JavaBeanConverter в конфигурации Spring. Я вижу тестовые примеры, где JavaBeanConverter зарегистрирован, как показано ниже.

    xstream.registerConverter(new JavaBeanConverter(xstream.getClassMapper(), "class"), -20); 

Но как мне установить это в моем весеннем конфиге.

В настоящее время мой весенний конфиг настроен как показано ниже

 <bean
       class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
       <property name="order" value="1" />
       <property name="mediaTypes">
              <map>
                    <entry key="json" value="application/json" />
                    <entry key="xml" value="application/xml" />
              </map>
       </property>
       <property name="defaultViews">
              <list>
                    <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" >
                            <property name="renderedAttributes" value="document" />
                    </bean>
                    <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                           <property name="marshaller">
                                  <bean class="org.springframework.oxm.xstream.XStreamMarshaller" p:autodetectAnnotations="true">
                                     <property name="encoding" value="UTF-8" />
                                  </bean>
                            </property>
                            <property name="contentType" value="application/xml;charset=UTF-8" />
                            <property name="modelKey" value="person" />
                    </bean>                                                
              </list>
       </property>
       <property name="ignoreAcceptHeader" value="true" />

</bean>            

Я использую аннотацию xstream для Alias ​​и Converter.

Я попытался расширить свой пользовательский конвертер из JavaBeanConverter. Он отлично сериализует обычные свойства, но я хочу, чтобы он сериализовал метод getXXX.

public class MyCustomConverter extends JavaBeanConverter  {

    public MyCustomConverter(Mapper mapper) {
        super(mapper);
    }
    @Override... marshal.. unmarshal... canConvert methods...
 }

Большое спасибо!

1 ответ

Добавьте это к определению вашего маршаллерского компонента:

    <property name="converters">
      <util:list>
        <bean class="com.MyBeanConverter">
          <constructor-arg value="com.MyBean" index="0" />
        </bean>
      </util:list>
    </property>

А затем определите следующий класс, который будет реализовывать преобразование

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter;

public class MyBeanConverter extends JavaBeanConverter {

   public MyBeanConverter(Class<?> theClass) {  
 super(new XStream().getMapper(), theClass); 
   }

}
Другие вопросы по тегам