【发布时间】:2019-08-30 11:20:24
【问题描述】:
我正在使用 Java 为一个接收 POST 方法调用的 webhook URL 编写一个控制器,该 URL 带有我需要收集的 JSON 正文。
这是一个简化版的控制器,带有Spring注解:
@RestController
public class MyWebhoook {
@PostMapping("/my-webhook")
public void getMyJson(@RequestBody Map<String, Object> json) {
System.out.println("WebHook collected JSON: " + json);
}
}
我用 Postman 发送这个 JSON 来测试它:
Header: Content-Type / application/json
{
"webhookKey" : "tranviaVermellCostaAvall",
"token" : "xx",
"channelId": 1,
"propertyId": "999999",
"status": "new",
"reservationId": "111211221",
"reservationStatus" : 1
}
我得到了这个答案:
{
"timestamp": "2019-04-09T07:23:38.093+0000",
"status": 405,
"error": "Method Not Allowed",
"message": "Request method 'POST' not supported",
"path": "/my-webhook"
}
服务器日志,提供更多信息:
Request method 'POST' not supported, path=/my-webhook}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7756c3cd
我尝试了这些不同的方法,结果相同:
@RequestMapping(value = "/my-webhook", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST)而不是@PostMapping("/my-webhook")注释。将接收到的 JSON 建模为 java 对象,而不是
Map<String, Object> json。- 使用 HttpServletRequest 而不是 @RequestBody 注解,尝试将请求读取为字符串。
我不明白为什么不允许使用 POST 方法。任何帮助,将不胜感激。
【问题讨论】:
-
尝试用@ResponseBody 标记你的方法,见stackoverflow.com/questions/12837907/…
-
在那个指向 StackOverflow 的答案中,没有一个建议的解决方案在我身边工作。令人惊讶的是,复制我的代码的其他开发人员可以正常工作。也许问题来自这个 Jackson 类,我的系统将其作为默认值
org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
标签: java json spring spring-security