Как преобразовать XML в объект с помощью Spring 3.0 mvc при выполнении запроса RESTful
Я использую Spring 3.0 rc1 framework, и в настоящее время я тестирую Spring mvc. Я хотел использовать Spring mvc для обработки запросов restful. Я настроил свой контроллер для обработки запроса URI. Я передаю xml с запросом. Итак, на контроллере у меня есть метод, подобный следующему:
public void request(RequestObject request) {
doSomething();
}
Мне трудно преобразовать xml в RequestObject. Я не видел много документации по этому вопросу, и мне было интересно, может ли кто-нибудь указать мне на право направление. Я предполагаю, что вам придется аннотировать RequestObject с помощью JAXB или что-то еще, чтобы сказать Spring преобразовать xml-файл в RequestObject, но я не уверен.
Спасибо за всю вашу помощь!!
1 ответов
для преобразования XML в объект Java вы можете использовать Apache Digest http://commons.apache.org/digester/. Весна использует его сама внутренне.
обновление Я не знал об этой новой функции в Spring 3.0. Извините за misdealing вы. Я написал быстрый тест, и это то, что вы должны сделать.
1) Настройка ViewResoler и MessageConverter в сервлете.XML. В моем тесте это выглядит так
<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) Добавьте аннотации структуры XML в свой 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) Добавьте аннотацию отображения в свой класс контроллера, например
@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);
}
}
надеюсь, это поможет вам.