【问题标题】:XML/JSON POST with RequestBody in Spring REST Controller在 Spring REST 控制器中使用 RequestBody 的 XML/JSON POST
【发布时间】:2011-12-01 09:36:01
【问题描述】:

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

从控制器获取 XML/JSON 内容对我来说没有任何问题。但是,如何在同一控制器方法中发布带有请求正文的 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);
}

【问题讨论】:

    标签: json rest spring-mvc xml-parsing


    【解决方案1】:

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

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

    【讨论】:

    • 斯托弗,我试过方法,你已经回答了。但是当我尝试将请求正文中的任何 XML/JSON 内容发布到控制器方法时。我从那里得到异常,即 HTTP Status 400 - Content type 'text/plain;charset=UTF-8' not supported 是因为我同时使用 ContentNegotiatingViewResolver 和 Http 消息转换器吗?或者这背后还有其他原因。
    • Spring 中的转换器注册某些内容类型(用于请求正文)并接受(用于响应)。对于 json,它是 application/json 和其他一些。对于 XML,它是 application/xml 和其他一些。确保您的客户发送 content-type: application/jsonaccept: application/json 并且它会起作用。
    • @Andreas Wederbrand....感谢您的评论 Andreas.. 它真的帮助了我想将 JSON/XML 内容发布到控制器的方式。
    • @Andreas Wederbrand....现在我可以使用 content-type: application/json for JSON 和 content-type: application/xml 将任何 JSON 或 XML 内容发布到我的 Spring 控制器对于 XML ..感谢您的建议....干杯...:)
    猜你喜欢
    • 2013-10-27
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2012-07-06
    • 2018-10-04
    相关资源
    最近更新 更多