0
我的服務器返回結果有兩種不同的類型:SearchResultDTO時successefull和String時出現錯誤。我需要處理這兩種類型,並總是返回SearchResultDTO類型。這裏是我的解串器:Jackson解串器將兩種類型作爲一個處理
public class SearchResultsDeserializer extends JsonDeserializer<SearchResultDTO> {
@Override
public SearchResultDTO deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonToken t = jp.getCurrentToken();
if (t == JsonToken.VALUE_STRING){
return new SearchResultDTO(jp.getText());
} else {
return jp.readValueAs(SearchResultDTO.class);
}
}
}
當我運行這段代碼和服務器發送SearchResultDTO對象,傑克遜進入無限循環通過調用該函數返回錯誤:「java.lang.StackOverflowError的:堆棧大小1036KB」
不起作用。同樣的無限循環。 –
@JohnnyDepp如果你100%確定你有沒有'SearchResultsDeserializer'註冊的競爭性不同的映射器,你可能不得不向我們展示你的其他代碼。因爲這100%爲我工作,這裏是演示https://gist.github.com/varren/38b76c4a62fc5024caedcdc469606649我認爲你註冊你的反序列化器註釋和這種方式,我認爲沒有可以幫助你。如果使用註解,則必須爲'jp.readValueAs(SearchResultDTO.class);' – varren
@JohnnyDepp編寫自定義實現,但爲什麼首先需要解串器?你只要在你的構造函數中用字符串arg給出錯誤sting。傑克遜可以理解這一點。如果你在json中給出字符串而不是對象,那麼默認行爲就是使用String args構造函數。 – varren