gpt4 book ai didi

java - 在 Spring 中接受任意 JSON 作为 RequestBody

转载 作者:行者123 更新时间:2023-12-01 07:18:04 24 4
gpt4 key购买 nike

正如标题所示,我希望我的 Controller 类能够接受 RequestBody 中的(大部分)任意 JSON 作为 POST 的一部分。在你问为什么我想要不可行的 JSON 之前,这是因为 JSON 只是通过非常少的处理传递到存储后端(仅提取一个字段)。

此 JSON 中有三个必填字段: dataschemaresourceID 。这是我的请求类的样子:

public class MyRequestBody implements Serializable {

private JsonObject data;
private JsonObject schema;
private String resourceID;
...

我已经了解导致此功能不起作用的序列化问题。我不想进一步扩展此数据模型来定义 dataschema 的字段的原因是我根本不知道它们将如何嵌套。这也是我不简单地使用 Map<String, String> 的原因。

是否有一个简单的解决方案来接收任意嵌套的 JSON 数据作为 RequestBody 的一部分,或者我是否被迫编写一个大型的强类型数据模型或接受它作为 Object ,转换为 JSON,并完成我所有的操作其他地方的字段验证?

Controller 签名供引用:

@RequestMapping(value = "test/data", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ResponseEntity<StorageData> publishData(@RequestBody MyRequest requestBody) {

这是一些 JSON 示例。事情变得危险的是 dataschema 部分,它们可能包含我不知道的多层嵌套:

{
"data": {
"display": "bilbo_baggins"
},
"resourceID": "0123456789",
"schema": {
"type": "record",
"namespace": "com.org.test",
"name": "mySchema",
"fields": [{
"name": "display",
"type": "string"
}]
}
}

最佳答案

  1. 您可以接收任意 JSON 的 JsonNode 对象

像这样:

@RequestMapping(value = "test/data", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ResponseEntity<StorageData> publishData(@RequestBody JsonNode requestBody) {.. }
  • 更改 MyRequestBody 类以使用 JsonNode 而不是 JsonObject 来处理数据架构。您不需要实现 Serialized,除非您在代码中需要它用于其他用途,但在请求中接收 Json 对象不需要它。
  • 关于java - 在 Spring 中接受任意 JSON 作为 RequestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367466/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com