【问题标题】:"status":415,"error":"Unsupported Media Type"“状态”:415,“错误”:“不支持的媒体类型”
【发布时间】:2017-10-23 19:19:14
【问题描述】:

我有以下控制器:

@PostMapping(value = {"/test/set_timeout"})
    @ResponseBody
    public void setAlertTimeout(@RequestBody Long timeout) {

我在邮递员中提出以下要求:

来自错误的文本:

{"timestamp":1495560868392,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message":"Content type 'multipart/form-data;boundary=----WebKitFormBoundary9IbVq5JAKxCYUs7P;charset=UTF-8' not supported","path":"/test/set_timeout"}

问题的原因以及如何正确发送请求?

附言

如果使用

public static class LongWrapper{
        private long timeout;

        public long getTimeout() {
            return timeout;
        }

        public void setTimeout(long timeout) {
            this.timeout = timeout;
        }
    }

而不是 Long 并传递 json({"timeout":"2"}) - 它工作正常

【问题讨论】:

标签: java spring spring-mvc post mime-types


【解决方案1】:

无需手动添加内容类型标头。您正在覆盖 Postman 设置的值。只需在 POST 请求中选择 form-data 并发送您的请求以查看它是否有效。

【讨论】:

    【解决方案2】:

    在您的请求中,您在 multipart/form-data 正文中发送超时属性。 在邮递员中,为正文选择选项“原始”并将内容类型设置为 application/json。然后输入以下内容作为正文内容:

    {timeout: 4}
    

    您还应该在控制器上设置消耗媒体类型。 (虽然它可能会自动解析为 json)例如:

    @PostMapping(value = {"/test/set_timeout"}, consumes = {MediaType.APPLICATION_JSON_VALUE})
    

    【讨论】:

      【解决方案3】:

      @RequestBody 用于将JSON 反序列化为POJO。如果您需要向控制器提交表单数据,请尝试类似

      @PostMapping(value = {"/test/set_timeout"})
      @ResponseBody
      public void setAlertTimeout(HttpServletRequest request) {
         Long l = request.getParameter("timeout");
         // continue
      }
      

      【讨论】:

        【解决方案4】:

        如果您需要使用 application/json 类型并在控制器方法中编写以下代码:-

           @RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
            public RestResponse save(@RequestParam("timestamp") String timestamp, @RequestParam("status") String status) {
        

        【讨论】:

        • 我要使用body
        • 你认为我为什么要使用json?
        • 使用RequestBody
        【解决方案5】:

        读取 json 时,您的内容类型应为 application/json。

        【讨论】:

        • 你在哪里看到json?
        猜你喜欢
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 2018-10-13
        • 2018-07-25
        • 2016-09-09
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多