Как преобразовать 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);
    }    
}

надеюсь, это поможет вам.