【问题标题】:POST request to Spring REST web service fails with HTTP status 415对 Spring REST Web 服务的 POST 请求失败,HTTP 状态为 415
【发布时间】:2013-12-08 19:30:30
【问题描述】:

我已经设置了一个 Spring RESTful Web 服务,用于接收用户的用户名和密码。一直在关注Spring IO上的教程

我的服务设置为接受用户名和密码,如下所示:

 @Controller
   @RequestMapping("/users")
   public class UserCommandController {
        private static Logger log = LoggerFactory.getLogger(UserCommandController.class);
        @RequestMapping(method = RequestMethod.POST)
        public ResponseEntity  createUser(@RequestBody UserDetail userDetail, UriComponentsBuilder builder) {
            User newUser = new User();
            newUser.setEmail(userDetail.getEmail());
            newUser.setPassword(userDetail.getPassword());
            newUser.setUserName(userDetail.getUsername());
            try {
                UserFactory.getInstance().saveNewUser(newUser);
            } catch(UserException ue) {
                log.error("Saving user failed. Exception: "+ue.getMessage());
            }
            return new ResponseEntity(HttpStatus.OK);
        }
    }

我通过 Google chrome 插件 POSTMAN 向服务发送 POST 参数作为测试,但我得到“HTTP: 415..服务器拒绝此请求,因为请求实体的格式不受请求的资源支持用于请求的方法。"

有人知道我做错了什么吗?

【问题讨论】:

标签: spring rest spring-mvc


【解决方案1】:

设置标题:

Content-Type=application/json

这解决了我的问题!

【讨论】:

    【解决方案2】:

    HTTP 415 响应代码表示服务器期望以不同内容类型发布的数据。您似乎只是发布了一个带有用户名、密码和电子邮件作为参数的表单。这将导致内容类型为 application/x-www-form-urlencoded。

    尝试使用 application/xml 或 application/json 的内容类型发布。在您的帖子正文中,您需要以相应的格式放置您的数据。例如,如果您使用 application.xml,则 XML 正文应如下所示:

    <userDetail>
        <userName>xxx</userName>
        <password>xxx</password>
        <email>xxx</email>
    </userDatail>
    

    当然,确切的格式(即元素名称)取决于 XML 绑定。事实上,无论预期格式是 XML 还是 JSON 或其他格式,也很可能是服务器配置。

    使用浏览器无法轻松发布这种类型的请求。您将需要一些其他 HTTP 客户端。像 SOAP-UI 这样的工具可能是一个不错的选择。

    【讨论】:

    • 我通过 POSTMAN 尝试了 JSON,这是一个 REST 客户端 - Google chrome 扩展,仍然没有运气,仍然从服务器获得相同的响应。
    • 你能否创建一个方法来 (a) 将 URI 映射到 GET 请求,(b) 在响应中简单地返回单个预填充的 UserDetail 对象。在浏览器中点击该 URI。它返回的内容有望向您显示服务器配置的格式。
    猜你喜欢
    • 2011-08-02
    • 2012-06-27
    • 2011-03-26
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2019-06-18
    相关资源
    最近更新 更多