Deserializacja JSON z wieloma typami w jednym polu

Chciałbym deserializować JSON (z Jackson 1.9.11 i RestTemplate 1.0.1), w którym jedno pole może mieć więcej znaczeń typów, na przykład:

    {"responseId":123,"response":"error"}

lub

    {"responseId":123,"response":{"foo":"bar", ... }}

Jeden lub inny przypadek działa poprawnie z jednym ustawiaczem określonego typu (String od niestandardowej klasy odpowiedzi), ale gdy umieściłem w moim ustawiaczu przesłonięcia komponentu bean jednostki, aby móc obsłużyć oba przypadki, zgłaszany jest wyjątek:

Caused by: org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [xxxx.templates.ExportResponse] and content type [application/json;charset=utf-8]

Myślałem o trzech rozwiązaniach, ale żadna z nich nie działała:

użycie tylko String setter i wewnątrz użyj ObjectMapper do unmarshall tego ciągu, jeśli nie jest on równy "error", ale kiedy ta JS Array nadejdzie, nie jest to ciąg znaków, więc nie używa się settera String :(.użyj obsługi typów polimorficznych (adnotacja @JsonTypeInfo) z własnym rozszerzeniem JsonDeserializer - nadal próbuję to zrozumieć i zaimplementować.utwórz listę HttpMessageConverter i umieść we wszystkich konwerterach wiadomości, mogę użyć. Ale myślę, że ten krok jest niepotrzebny, ponieważ używany jest tylko MappingJacksonHttpMessageConverter, czy mam rację?EDIT: jak to działa teraz

Seter w komponencie bean:

@JsonDeserialize(using = ResponseDeserializer.class)
public void setResponse(Object responseObject) {
    if(responseObject instanceof Response)
        response = (Response) responseObject;
}

Metoda deserializacji w ResponseDeserializer:

public Response deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
    Response response = new Response();

    if(JsonToken.START_OBJECT.equals(parser.getCurrentToken())) {
        ObjectMapper mapper = new ObjectMapper();
        response = mapper.readValue(parser, Response.class);
    } else
        throw new JsonMappingException("Unexpected token received.");

    return response;
}

questionAnswers(1)

yourAnswerToTheQuestion