控制器:
@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"
答案 0 :(得分:1)
使用。将请求主体转换为方法参数
HttpMessageConverter
。HttpMessageConverter
负责 从HTTP请求消息转换为对象并进行转换 从一个对象到HTTP响应体。该RequestMappingHandlerAdapter
支持@RequestBody
注释 以下默认HttpMessageConverters
:
ByteArrayHttpMessageConverter
转换字节数组。
StringHttpMessageConverter
转换字符串。
FormHttpMessageConverter
将表单数据转换为MultiValueMap或从MultiValueMap转换。
SourceHttpMessageConverter
转换为/来自 javax.xml.transform.Source。
所以也许request
参数不是一个简单的字符串(特别是你使用POST
)并且无法转换。