2013-09-09 2 views
1

Person.java: конфигурацияSpring MVC 3.2 - XStreamAlias ​​Игнорируется

@XStreamAlias("person") 
public class Person { 
    @XStreamAlias("id") 
    private Long personProfileId; 
    private String lastName; 
    private String firstName; 
    private String middleName; 
    private String nameSuffix; 
    private String namePrefix; 

    // etc ... 
} 

Spring:

<bean id="contentNegotiationManager" 
    class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="favorPathExtension" value="false" /> 
    <property name="favorParameter" value="true" /> 
    <property name="ignoreAcceptHeader" value="true" /> 
    <property name="useJaf" value="false" /> 
    <property name="defaultContentType" value="application/xml" /> 

    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json" /> 
      <entry key="xml" value="application/xml" /> 
     </map> 
    </property> 
</bean> 

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1" /> 
    <property name="contentNegotiationManager" ref="contentNegotiationManager" /> 

    <property name="defaultViews"> 
     <list> 
      <bean 
      class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 

      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <constructor-arg> 
        <bean class="org.springframework.oxm.xstream.XStreamMarshaller" /> 
       </constructor-arg> 
      </bean> 
     </list> 
    </property> 
</bean> 

<mvc:annotation-driven 
    content-negotiation-manager="contentNegotiationManager" /> 

Вызов http://mycompany.com:8080/myapp/persons?format=xml возвращается:

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
<com.example.myapp.model.Person> 
    <personProfileId>1</personProfileId> 
    <lastName>McCartney</lastName> 
    <firstName>James</firstName> 
    <middleName>Paul</middleName> 
</com.example.myapp.model.Person> 
<com.example.myapp.model.Person> 
    <personProfileId>2</personProfileId> 
    <lastName>Lennon</lastName> 
    <firstName>John</firstName> 
    <middleName>Winston</middleName> 
</com.example.myapp.model.Person> 
<com.example.myapp.model.Person> 
    <personProfileId>3</personProfileId> 
    <lastName>Starkey</lastName> 
    <firstName>Richard</firstName> 
</com.example.myapp.model.Person> 
<com.example.myapp.model.Person> 
    <personProfileId>4</personProfileId> 
    <lastName>Harrison</lastName> 
    <firstName>George</firstName> 
</com.example.myapp.model.Person> 
</list> 

Я ожидал бы, чтобы вернуться:

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
<Person> 
    <id>1</id> 
    <lastName>McCartney</lastName> 
    <firstName>James</firstName> 
    <middleName>Paul</middleName> 
</Person> 
<Person> 
    <id>2</id> 
    <lastName>Lennon</lastName> 
    <firstName>John</firstName> 
    <middleName>Winston</middleName> 
</Person> 
<Person> 
    <id>3</id> 
    <lastName>Starkey</lastName> 
    <firstName>Richard</firstName> 
</Person> 
<Person> 
    <id>4</id> 
    <lastName>Harrison</lastName> 
    <firstName>George</firstName> 
</Person> 
</list> 

Кажется, что XStream правильно вызывается для маршаллирования объекта в XML, но аннотации @XStreamAlias ​​игнорируются. Нужна ли дополнительная конфигурация, чтобы это работало?

ответ

1

Выяснил это. Аннотированные классы должны быть явно идентифицированы с XStreamMarshaller.

<property name="defaultViews"> 
    <list> 
     <bean 
     class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 

     <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
      <constructor-arg> 
       <bean class="org.springframework.oxm.xstream.XStreamMarshaller"> 
        <property name="annotatedClasses"> 
         <array> 
          <value>com.example.myapp.model.Person</value> 
         </array> 
        </property></bean> 
      </constructor-arg> 
     </bean> 
    </list> 
</property> 

0

Я пытался выяснить это то же самое (хотя и с проектом Spring загрузки) и нашел альтернативу: autodetectAnnotations.

xstreamMarshaller.setAutodetectAnnotations(true); 

See this project, добавьте эту строку в Application.java.

 Смежные вопросы

  • Нет связанных вопросов^_^