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.
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
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