Spring MVC:不反序列化JSON请求主体
我正在从事Spring
MVC项目,我需要做的任务之一是要求我在POST请求中具有由用户发送的一串JSON数据。我知道Spring会使用Jackson向对象反序列化JSON,但是如果我尝试以下操作:
@RequestMapping(value = "/test", method = RequestMethod.POST)public void doSomething(@RequestBody String json) {
// do something
}
我只是简单地收到HTTP 400 Bad Request(“客户端发送的请求在语法上是不正确的。”)。
如何获取客户端以字符串形式发送的原始JSON?
回答:
当Spring MVC找到与URL路径匹配的请求映射,但参数(或标头或其他内容)与处理程序方法期望的不匹配时,通常会看到这种类型的错误。
如果使用@RequestBody批注,那么我相信Spring
MVC希望将POST请求的整个主体映射到Object。我猜你的身体不仅仅是一个字符串,而是一些完整的JSON对象。
如果您期望使用JSON对象的Java模型,则可以用doSomething声明中的String参数替换String参数,例如
public void doSomething(@RequestBody MyObject myobj) {
如果您没有与JSON相匹配的Java对象,则可以尝试通过将String
类型替换为a 来使其工作,Map<String,
Object>并查看是否更接近可行的解决方案。
您还可以在Spring MVC中打开调试日志记录,以获取有关为何请求失败的更多信息。
考虑到注释中的要求,您可以简单地将HttpServletRequest注入到您的方法中并自己读取主体。
public void doSomething(HttpServletRequest request) { String jsonBody = IOUtils.toString( request.getInputStream());
// do stuff
}
以上是 Spring MVC:不反序列化JSON请求主体 的全部内容, 来源链接: utcz.com/qa/411391.html