对Spring REST Web服务的POST请求失败,HTTP状态为415

时间:2013-11-24 01:12:12

标签: spring rest spring-mvc

我已经设置了一个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 ..服务器拒绝了此请求,因为请求实体的格式不受请求的资源支持对于要求的方法。

enter image description here

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

2 个答案:

答案 0 :(得分:1)

设置标题:

Content-Type=application/json

这解决了我的问题!

答案 1 :(得分:0)

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这样的工具可能是一个不错的选择。