正如标题所示,我希望我的控制器类在POST的一部分中接受(主要是)RequestBody中的任意JSON。在您问我为什么想要无法使用的JSON之前,这是因为JSON只是通过非常少的处理(仅提取一个字段)简单地传递到了存储后端。
此JSON中有三个必填字段:data
,schema
和resourceID
。这是我的请求类的样子:
public class MyRequestBody implements Serializable {
private JsonObject data;
private JsonObject schema;
private String resourceID;
...
我已经了解导致序列化不起作用的序列化问题。我不想进一步扩展此数据模型来为data
和schema
定义字段的原因是,我根本不知道它们将如何嵌套。这就是为什么我不简单地使用Map<String, String>
。
是否有一种简单的解决方案来接收RequestBody
内的任意嵌套JSON数据,还是我不得不编写一个大型的强类型数据模型或将其作为Object
接受,转换为JSON,并在其他地方进行所有字段验证?
控制器签名以供参考:
@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。在data
和schema
部分中出现问题的地方可能会包含我不知道的多层嵌套:
{
"data": {
"display": "bilbo_baggins"
},
"resourceID": "0123456789",
"schema": {
"type": "record",
"namespace": "com.org.test",
"name": "mySchema",
"fields": [{
"name": "display",
"type": "string"
}]
}
}
答案 0 :(得分:2)
赞:
@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) {.. }