我想用Spring Boot编写一个小而简单的REST服务。下面是REST服务代码:
@Async
@RequestMapping(value = "/getuser", method = POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Record getRecord(@RequestBody Integer userId) {
Record result = null;
// Omitted logic
return result;
}
我发送的JSON对象如下:
{
"userId": 3
}
警告964---[XNIO-2 task-7].w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP消息:org.SpringFramework.HTTP.Converter.HttpMessageNotReadableException:无法读取文档:无法反序列化START_OBJECT令牌中的java.lang.Integer实例[source:java.io.PushbackInputStream@12e7333c;行:1,列:1];嵌套异常为com.fasterxml.jackson.DataBind.JSONMappingException:无法反序列化[source:java.io.PushbackInputStream@12e7333c;行:1,列:1]处START_OBJECT标记外的java.lang.Integer实例
显然,Jackson不能将传递的JSON反序列化为integer
。如果您坚持通过请求体发送用户的JSON表示,则应该将userid
封装在另一个bean中,如下所示:
public class User {
private Integer userId;
// getters and setters
}
然后使用该bean作为处理程序方法参数:
@RequestMapping(...)
public @ResponseBody Record getRecord(@RequestBody User user) { ... }
如果您不喜欢创建另一个bean的开销,可以将userid
作为Path变量的一部分传递,例如/getuser/15
。为了做到这一点:
@RequestMapping(value = "/getuser/{userId}", method = POST, produces = "application/json")
public @ResponseBody Record getRecord(@PathVariable Integer userId) { ... }
由于您不再在请求正文中发送JSON,因此应该删除consumes
属性。
下面有一个JSON,我试图使用Jackson将其解析为POJO 我的响应POJO片段如下 以及他们的吸气手和二传手 当我得到“org.codehaus.jackson.map.jsonMappingException:Can not deserialize instance of java.util.list out of START_OBJECT token”时,我的声明是否错误? 解析逻辑如下
如果您看到我的实体类,我在teacher.java中有一组枚举。 当我试着发布这个时,我会出错 我已经尝试了几乎所有的解决方案,比如,但没有成功。
如下所示 但是在执行它时,我遇到了以下错误,当它是JSON中的JSON时,我很小心地创建了一个新类,就像在usagenlu中一样
我正在尝试发布一个自定义对象的。请求体中的JSON如下所示: 处理请求的服务器端代码: 实体: 但会引发异常:
例外情况: 套接字处理程序 我相信当JSON被解析为WorkstationRequest对象时会出现异常,原因是下面的项。这是套接字处理程序: 我不知道如何开始调试它。堆栈跟踪从未触及我的应用程序。我正在使用部署我的.jar,并使用执行它
在执行从serviceA到serviceB的请求时, serviceA中的测试请求是