簡體   English   中英

Spring Boot @RestController,在反序列化@RequestBody中的Collection時容忍MismatchedInputException

[英]Spring Boot @RestController, be tolerant to MismatchedInputException when deserializing a Collection in @RequestBody

我正在嘗試實現一個端點,它通過@RequestBody接受一個List<SomeClass>並支持部分處理/容錯。

就像,即使某些元素是錯誤的(甚至可能是不同的類型,但仍然是有效的 JSON),丟棄它們並繼續下一個而不是拋出異常並快速失敗。

我已經在每個元素上以編程方式調用驗證器,而不是使用@Valid ,但是每當我收到具有不同模式或類型的東西時,我都會得到一個com.fasterxml.jackson.databind.exc.MismatchedInputException

我怎樣才能改變這種行為而不是失敗,而是忽略並處理下一個元素?

我正在使用 Spring Boot 2.2.3.RELEASE

我嘗試使用@JsonIgnoreProperties(ignoreUnknown = true) ,但是當我收到非對象類型時,仍然拋出異常。

我要處理的示例 JSON:

[
    null,
    [],
    {},
    -1,
    false,
    "Test",
    { "someKey": "someValue" }
]

其中只有{ "someKey": "someValue" }是有效的SomeClass定義。

我會為 Spring 創建一個自定義反序列化器:

如何使用 Jackson 和 Spring Boot 提供自定義反序列化器

然后,在我的反序列化器中,我會將 JSON 字符串處理為通用 JSON 數組並遍歷它以嘗試反序列化數組中的每個項目。

對於成功的,將它們添加到反序列化器將返回的列表中。 對於那些不“起作用”的,將它們扔掉並繼續加工。

沒有代碼,就沒有什么可以幫助的了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM