3 回答
TA贡献1884条经验 获得超4个赞
您可以只使用地图进行输入。然后,您可以根据地图中包含的字段类型访问地图中的字段。
@PostMapping(value = "/lookup")
public ResponseEntity<AppResponse> getLookup(@RequestBody Map<String, Object> lookupRequestObject) {
// THIS METHOD KNOWS WHICH FIELD TO USE
// FURTHER LOGIC WOULD BE HERE.
return ResponseEntity.ok(response);
}
TA贡献1111条经验 获得超0个赞
如果结构未知,则始终可以使用 type 并将其转换为 或直接在 上工作。如果您需要,可以使用以下方法:JSON objectMap<String, Object>POJOMapPOJOconvertValue
@PostMapping(value = "/lookup")
public ResponseEntity<AppResponse> getLookup(@RequestBody Map<String, Object> payload) {
// read map
ObjectMapper objectMapper = new ObjectMapper();
if (payload.containsKey("seqNo")) {
Sequence seq = objectMapper.convertValue(payload, Sequence.class);
// other logic
} else if (payload.containsKey("country")) {
Country country = objectMapper.convertValue(payload, Country.class);
}
// the same for other types
// FURTHER LOGIC WOULD BE HERE.
return ResponseEntity.ok(response);
}
您也可以尝试反序列化到,但它绑定了从另一端不好的控制器。com.fasterxml.jackson.databind.JsonNodeJackson
TA贡献1853条经验 获得超18个赞
可以使用 Map 作为方法的参数。两个重要的补充:映射对应于 JSON 对象,因此当 JSON 对象传递到您的方法时,Spring(默认使用 Jackson)会将其转换为映射,因此不需要其他代码。另外,为了确保您可以向注释中添加您希望接收的 JSON 输入:因此请更改该行
@PostMapping(value = "/lookup")
自
@PostMapping(value = "/lookup", headers = "Accept=application/json")
最后,您发布的输入不是有效的单个 JSON 对象。它是 3 个独立的 JSON 对象。因此,您需要一个包含 JSON 对象的 JSON 数组,或者一个 JSON 对象。如果你想要一个JSON数组,那么在你的方法中使用参数,所以你的解决方案应该看起来要么是一样的,但带有参数,而不仅仅是mapMap<String, Object>List<Map<String, Object>>
@PostMapping(value = "/lookup", headers = "Accept=application/json")
public ResponseEntity<AppResponse> getLookup(@RequestBody Map<String, Object> lookupRequestObject) {
// THIS METHOD KNOWS WHICH FIELD TO USE
// FURTHER LOGIC WOULD BE HERE.
return ResponseEntity.ok(response);
}
List<Map<String, Object>>
添加回答
举报