我有围绕Spring的REST服务构建。我想实现一个可以添加用户的POST方法。用户的数据位于请求正文中,可以是JSON / XML。我想要服务器端实现
我在@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;
}
}
答案 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