Spring将bean绑定到休息后请求

时间:2013-04-23 14:31:10

标签: rest spring-mvc

我有围绕Spring的REST服务构建。我想实现一个可以添加用户的POST方法。用户的数据位于请求正文中,可以是JSON / XML。我想要服务器端实现

  1. 自动将传入数据映射到Java bean
  2. 使用单一实现处理这两种类型的数据(JSON / XML)。
  3. 我在@ModelAttribute的{​​{1}}方法中尝试使用addUser,但在UserController对象中将所有字段都清空了。任何线索?

    这是Spring配置文件

    user

    UserController类和addUser方法

    <mvc:annotation-driven />
    
    <context:component-scan base-package="com.rest.sg.controller" />
    
    <bean
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
            </map>
        </property>
    
        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean
                    class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                </bean>
                <!--  XML view -->
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg>
                        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                            <property name="classesToBeBound">
                                <list>
                                    <value>com.rest.sg.bean.User</value>
                                </list>
                            </property>
                        </bean>
                    </constructor-arg>
                </bean>
            </list>
        </property>
        <property name="ignoreAcceptHeader" value="true" />
    
    </bean>
    

    和用户Bean

    @Controller
    public class UserController {
    
        @RequestMapping(method=RequestMethod.POST, value="/user")
        @ResponseBody
        public User addUser(@ModelAttribute("user") User user) {
            userService.addUser(user);
            return user;
        }
    
    }
    

2 个答案:

答案 0 :(得分:1)

您的控制器需要知道如何映射数据。默认是在对象的属性上映射请求参数。

如果您发送代表User对象的JSON,您可以尝试

public User addUser(@RequestBody User user) {

答案 1 :(得分:0)

这样做:

  @RequestMapping(value="/persons", method = RequestMethod.POST, 
                headers="Accept=*/*", 
                consumes="application/json")
public User addUser( @RequestBody User u){
              //Code.
}

发送请求时,发送标题

Content-Type:application/json //This is important
Accept: application/json