webservice返回一個空字符串,而不是NULL,導致Jackson崩潰。 因此,我創建了一個自定義分析器,我試圖手動解析它?任何想法我怎麼能做到這一點?RestTemplate&Jackson - 自定義JSON反序列化?
我在這裏做錯了什麼?我想要做的就是像往常一樣將JSON解析爲對象。字段名稱使用@JsonProperty添加到我的屬性中,因此解析器應該知道如何轉換它。
public class InsertReplyDeserializer extends JsonDeserializer<ListingReply> {
@Override
public ListingReply deserialize(JsonParser jsonParser, DeserializationContext arg1)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
// If service returns "" instead of null return a NULL object and don't try to parse
if (node.getValueAsText() == "")
return null;
ObjectMapper objectMapper = new ObjectMapper();
ListingReply listingReply = objectMapper.readValue(node, ListingReply.class);
return listingReply;
}
}
在大多數情況下,我沒有做有關反序列化的東西,這就是壞的數據來自其崩潰解析服務器的特殊情況,因爲解析器期待的對象結構,但響應是一個空字符串(對於結果中的特定字段)。所以這是一個解決方案,僅反序列化我的應用程序中的一個模型。在應用程序的其餘部分,我不必做任何反序列化JSON的工作,它全部由RestTemplate&Jackson自動化(使用@JsonProperty註釋)。 – aryaxt
沒錯,所以我上面的解決方案建議您將此特殊轉換器添加到您的其餘模板中,該模板將處理空響應字符串,從而消除手動解序列化。轉換器提供了精確處理像這些 – nilesh
Ooooh這樣的情況,所以不必處理單個類的反序列化中的錯誤,而是將其移至MessageConverter,然後應用於所有內容。我會試一試,並會回發 – aryaxt