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

回到顶部