2009-11-06 2 views
9

J'utilise le framework Spring 3.0 RC1 et je suis en train de tester Spring mvc. Je voulais utiliser Spring mvc pour gérer les requêtes reposantes. J'ai mis en place mon contrôleur pour gérer la demande d'URI. Je passe en XML avec la demande. Donc, sur le contrôleur que j'ai une méthode comme suit:Comment puis-je convertir XML en un objet en utilisant Spring 3.0 mvc lors de la demande RESTful

public void request(RequestObject request) { 
    doSomething(); 
} 

Je suis un moment difficile convertir le XML au RequestObject. Je n'ai pas vu beaucoup de documentation à ce sujet et je me demandais si quelqu'un pouvait me diriger dans la bonne direction. Je suppose que vous auriez à annoter le RequestObject en utilisant JAXB ou quelque chose afin de dire à Spring de convertir le fichier xml en RequestObject mais je ne suis pas sûr.

Merci pour toute votre aide !!

Répondre

8

Pour convertir un objet XML en Java, vous pouvez utiliser Apache Digest http://commons.apache.org/digester/. Le printemps l'utilise lui-même en interne.

Mise à jour Je n'étais pas au courant de cette nouvelle fonctionnalité dans Spring 3.0. Désolé de vous avoir mal renseigné. J'ai écrit un test rapide et c'est ce que vous devriez faire.

1) Configurez ViewResoler et MessageConverter dans -servlet.xml. Dans mon test, il ressemble à ce

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> 

    <bean id="person" class="org.springframework.web.servlet.view.xml.MarshallingView"> 
     <property name="contentType" value="application/xml"/> 
     <property name="marshaller" ref="marshaller"/> 
    </bean> 

    <oxm:jaxb2-marshaller id="marshaller"> 
     <oxm:class-to-be-bound name="com.solotionsspring.test.rest.model.Person"/> 
    </oxm:jaxb2-marshaller> 

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <property name="messageConverters"> 
      <list> 
      <ref bean="marshallingHttpMessageConverter"/> 
      </list> 
     </property> 
    </bean> 

    <bean id="marshallingHttpMessageConverter" 
      class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
     <property name="marshaller" ref="marshaller" /> 
     <property name="unmarshaller" ref="marshaller" /> 
    </bean> 

2) Ajouter des annotations de structure XML dans votre classe Java


@XmlRootElement 
public class Person { 
    private String name; 
    private int age; 
    private String address; 
    /** 
    * @return the name 
    */ 
    @XmlElement 
    public String getName() { 
     return name; 
    } 
    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 
    /** 
    * @return the age 
    */ 
    @XmlElement 
    public int getAge() { 
     return age; 
    } 
    /** 
    * @param age the age to set 
    */ 
    public void setAge(int age) { 
     this.age = age; 
    } 
    /** 
    * @return the address 
    */ 
    @XmlElement 
    public String getAddress() { 
     return address; 
    } 
    /** 
    * @param address the address to set 
    */ 
    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

3) Ajouter une annotation de mappage dans votre classe Controller comme


@Controller 
public class RestController { 

    @RequestMapping(value = "/person", method = RequestMethod.PUT) 
    public ModelMap addPerson(@RequestBody Person newPerson) { 
     System.out.println("new person: " + newPerson); 
     return new ModelMap(newPerson); 
    }  
} 

Hope this va vous aider.

+0

Merci d'avoir eu le lien .... mais peut-être que je ne cherchais pas une bibliothèque qui convertit xml. Je me demandais comment Spring MVC que le xml doit être converti en un objet. L'objet est nul, peu importe ce que je POST dans le corps de la requête. – brock

+0

C'est exactement ce que je cherchais. Je suppose que je manquais le message Converter. J'ai vu la documentation sur @RequestBody mais je ne savais pas si c'était ce qui devrait être utilisé. Merci de votre aide!! – brock

Questions connexes