2009-11-06 17 views
9

estoy usando el Spring 3.0 RC1 marco y actualmente estoy probando Spring MVC. Quería usar Spring mvc para manejar solicitudes tranquilas. Configuré mi controlador para manejar la solicitud de URI. Estoy pasando xml con la solicitud. Así en el controlador que tengo un método como sigue:¿Cómo puedo convertir XML a un objeto utilizando Spring MVC 3.0 al hacer la solicitud REST

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

estoy teniendo dificultades para convertir el XML al RequestObject. No he visto mucha documentación sobre esto y me preguntaba si alguien podría señalarme en la dirección correcta. Estoy supongo que tendría que realizar anotaciones en el RequestObject utilizando JAXB o algo con el fin de decirle a la primavera para convertir el archivo XML para RequestObject pero no estoy seguro.

Gracias por toda su ayuda !!

Respuesta

8

Para convertir XML a objeto Java puede utilizar Apache Digest http://commons.apache.org/digester/. Spring lo usa internamente.

Actualización No tenía conocimiento de esta nueva función en Spring 3.0. Perdón por maltratarte. escribí prueba rápida y esto es lo que debe hacer.

1) Configure ViewResoler y MessageConverter en -servlet.xml. En mi prueba parece que este

<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) Añadir anotaciones estructura XML en su clase 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) Añadir la anotación de la cartografía en su clase controlador como


@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); 
    }  
} 

Esperanza esta Te ayudará.

+0

Gracias obtuvo el enlace .... pero quizás no estaba buscando una biblioteca que convirtiera xml. Me preguntaba cómo Spring mvc que el xml necesita convertirse en un objeto. El objeto es nulo sin importar lo que yo publique en el cuerpo de la solicitud. – brock

+0

Esto es exactamente lo que estaba buscando. Supongo que me faltaba el mensaje Convertidor. Vi documentación sobre @RequestBody pero no estaba seguro de si esto es lo que debe ser usado para. ¡¡Gracias por tu ayuda!! – brock

Cuestiones relacionadas