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>>
添加回答
舉報