我有以下控制器:
@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"}
问题的原因是什么以及如何发送请求正确?
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"}
) - 它的工作正确
答案 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并发送您的请求以查看它是否有效。