Spring不支持@RequestBody内容类型

时间:2015-03-11 19:44:03

标签: spring

控制器:

@RestController
public class ExampleCtrl {
    @RequestMapping(name="/example", method=RequestMethod.POST)
    public String example(@RequestBody String request) {
        System.out.println("example: " + request);
        return "OK";
    }
}

请求(linux控制台):

curl -i -X POST 'https://localhost/example' -k -d 'name=value'

弹簧控制台输出:

example: name=value

但是当我使用@RequestBody请求而不是@RequestBody时它不起作用:

@RestController
public class ExampleCtrl {
    @RequestMapping(name="/example", method=RequestMethod.POST)
    public String example(@RequestBody Request request) {
        System.out.println("example: " + request);
        return "OK";
    }
}

@JsonIgnoreProperties(ignoreUnknown=true)
class Request {
    private String name;

    public Request() {}

    public String getName() {
        return name;
    }
}

我有例外:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

修改 解决。它在我使用

时有效
curl -i -X POST 'https://localhost/example' -k -d '{"name": "value"}' --header "Content-Type:application/json"

1 个答案:

答案 0 :(得分:1)

根据Spring documentation

  

使用。将请求主体转换为方法参数   HttpMessageConverterHttpMessageConverter负责   从HTTP请求消息转换为对象并进行转换   从一个对象到HTTP响应体。该   RequestMappingHandlerAdapter支持@RequestBody注释   以下默认HttpMessageConverters

     

ByteArrayHttpMessageConverter转换字节数组。

     

StringHttpMessageConverter转换字符串。

     

FormHttpMessageConverter将表单数据转换为MultiValueMap或从MultiValueMap转换。

     

SourceHttpMessageConverter转换为/来自   javax.xml.transform.Source。

所以也许request参数不是一个简单的字符串(特别是你使用POST)并且无法转换。