开发者

How can I Convert XML to an Object using Spring 3.0 mvc while making RESTful request

I'm using the Spring 3.0 RC1 framework and I'm currently testing out Spring mvc. I wanted to use Spring mvc to handle restful requests. I have set up my controller to handle the URI request. I am passing in xml with the request. So on the controller I have a method like follows:

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

I am having a hard time converting the xml to the RequestObject. I haven't seen much documentation on this and I was wondering if anyone could point me in the right direction. I'm guess that you would have to annotate the RequestObject using JAXB or something in order to tell Spring to convert the xml file to RequestObject but I'm not sure.

开发者_开发百科Thanks for all of your help!!


For converting XML to Java object you can use Apache Digest http://commons.apache.org/digester/. Spring uses it itself internally.

Update I wasn't aware about this new feature in Spring 3.0. Sorry for misdealing you. I wrote quick test and this is what you should do.

1) Set up ViewResoler and MessageConverter in -servlet.xml. In my test it looks like this

    <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) Add XML structure annotations into your Java class


@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) Add mapping annotation into your Controller class like


@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 will help you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜