java - 使用 Spring 将入站 JSON 消息转换为 Java 对象

标签 java json spring

我正在尝试通过在 Spring Boot 中反序列化 JSON 消息来创建 Java 对象。我有一个这样的类(class):

public class Status implements Serializable {
    private int uptime;
}

然后我有一个这样的休息 Controller :

@RestController
public class StatusReceiver {

    @RequestMapping(value = "/poststatus", method = RequestMethod.POST)
    public @ResponseBody Status storeStatus(@RequestBody Status statusMessage) {

        System.out.println("Uptime: " + statusMessage.getUptime());

        return statusMessage;

    }

}

我绝对不明白我在这里所做的事情。我希望 Controller 在收到消息时创建一个 Status 对象并将其存储在数据库中。

这段代码的输出是:

Uptime: 0

它收到的消息是:

{
  "Status": [
    {
      "uptime": 12345.0
    }
  ]
}

我显然错过了一些东西。如何让 Spring 将 JSON 对象转换为 Status java 对象?另外,该方法的返回值在哪里?

最佳答案

请求正文 JSON 与状态对象结构不匹配。要么你的 body 应该是

{uptime: 12345.0}

或者 Status 类应该是

class Status {
   List<Map<String, Long>> status = new ArrayList<>();
}

您可以定义一个新类并拥有该新类的列表,而不是拥有 map 列表

class StatusInfo{
   long uptime;
}

class Status {
   List<StatusInfo> status = new ArrayList<>();
}

关于java - 使用 Spring 将入站 JSON 消息转换为 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301890/

相关文章:

java - 使用 Spring Boot 进行多个 REST 调用

java - 我是否需要刷新或关闭自定义 Spring Web MessageConverter 中的 OutputStream

java - 如何将字符串 "7/7"转换为 Int 1?

java - 多任务处理和进度条

java - 通过 JPA 保存 List<String> 时出现问题?

json - 将层次结构从派生列写入不带列名称的 JSON 接收器 Azure Dataflow

具有多个模块和多个主类的spring boot项目-单元测试失败

java - 限制对构造函数的输入,同时保持构造函数代码最少

c# - 使用 Json.Net 反序列化在某些字段上失败

ios - 在 iOS 应用程序中使用 JSON 的最佳方式是什么?