亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在春季啟動 API 后方法中接收自定義的 JSON 對象

如何在春季啟動 API 后方法中接收自定義的 JSON 對象

臨摹微笑 2022-09-14 17:20:07
我正在嘗試接收@RequestBody的JSON對象,我不知道,即JSON對象可以是任何長度和數據。比方說,JSON 可以如下所示{'seqNo': 10 }{'country': 'US', 'state': 'CA'}{'customer': 'Alex', product: 'UPS', date:'25-Mar-2018'}在春季啟動 API 中,我有一個方法來接收該 JSON 對象。@PostMapping(value = "/lookup")public ResponseEntity<AppResponse> getLookup(@RequestBody LookupRequestObject lookupRequestObject) {        // THIS METHOD KNOWS WHICH FIELD TO USE        // FURTHER LOGIC WOULD BE HERE.        return ResponseEntity.ok(response);    }我已經閱讀了有關杰克遜序列化的文章,但仍然在尋找解決方案。自定義杰克遜對象映射器任何幫助將不勝感激。
查看完整描述

3 回答

?
慕村9548890

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);

}


查看完整回答
反對 回復 2022-09-14
?
catspeake

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


查看完整回答
反對 回復 2022-09-14
?
慕容森

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>>


查看完整回答
反對 回復 2022-09-14
  • 3 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號