" status":415,"错误":"不支持的媒体类型"

时间:2017-05-23 17:37:40

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

我有以下控制器:

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

我在邮递员中提出以下要求: enter image description here

错误的文字:

{"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"}

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

P.S。

如果要使用

public static class LongWrapper{
        private long timeout;

        public long getTimeout() {
            return timeout;
        }

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

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

{timeout: 4}

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

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

答案 4 :(得分:0)

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