1

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

  1. 自动将传入数据映射到 Java bean
  2. 并使用单一实现处理两种类型的数据(JSON/XML)。

我尝试过使用@ModelAttributeinaddUser方法,UserController但将对象中的所有字段都设为空user。有什么线索吗?

这是Spring配置文件

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

UserController 类和 addUser 方法

@Controller
public class UserController {

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

}

和用户 Bean

@Entity
@XmlRootElement
@Table(name = "user", catalog = "blahblah")
public class User implements java.io.Serializable {

    // Fields
    // Getter , Setters
    ...

}
4

2 回答 2

1

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

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

public User addUser(@RequestBody User user) {
于 2013-04-23T20:43:36.520 回答
0

这样做:

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

发送请求时,发送header

Content-Type:application/json //This is important
Accept: application/json
于 2013-04-24T19:40:14.587 回答