Spring REST Controller中带有RequestBody的XML / JSON POST


问题内容

我正在用Spring
3.0创建一个RESTful网站。我正在使用ContentNegotiatingViewResolver以及HTTP消息转换器(例如MappingJacksonHttpMessageConverterJSON,MarshallingHttpMessageConverterXML等)。如果我在url的末尾使用.xml后缀,并且在JSON与URL带有.json后缀的情况下相同,则能够成功获取XML内容。

从控制器获取XML / JSON内容对我来说没有任何问题。但是, 如何在同一Controller方法中以请求主体发布XML / JSON?

例如

@RequestMapping(method=RequestMethod.POST, value="/addEmployee")
   public ModelAndView addEmployee(@RequestBody Employee e) {
        employeeDao.add(e);
        return new ModelAndView(XML_VIEW_NAME, "object", e);
}

问题答案:

您应该考虑不使用View返回JSON(或XML),而应使用@ResponseBody批注。如果应该返回雇员,那么,如果您使用这样的方法定义和实现(请注意,未经测试),Spring和MappingJacksonHttpMessageConverter会自动将Employee对象转换为JSON:

   @RequestMapping(method=RequestMethod.POST, value="/addEmployee")
   @ResponseBody
   public Employee addEmployee(@RequestBody Employee e) {
     Employee created = employeeDao.add(e);
     return created;
   }