Desserializando JSON com vários tipos em um campo

Eu gostaria de desserializar JSON (com Jackson 1.9.11 e RestTemplate 1.0.1), em que um campo pode ter mais significados de tipo, por exemplo:

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

ou

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

Um ou outro caso funciona corretamente com um configurador de tipo específico (classe String ou personalizada Response), mas quando eu coloco em meu setificador de substituição de bean de entidade para poder lidar com ambos os casos, a exceção é lançada:

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]

Eu estava pensando em três soluções, mas não consegui nenhuma delas funcionando:

usando apenas String setter e dentro use ObjectMapper para desmarcar essa string, se ela não for igual a "error", mas quando essa Array JS vier, ela não será string, portanto, nenhum String setter será usado :(.use manipulação do tipo polimórfico (anotação @JsonTypeInfo) com a própria extensão JsonDeserializer - ainda estou tentando entender isso e implementar.criar lista de HttpMessageConverter e colocar dentro de todos os conversores de mensagens, eu posso usar. Mas eu acho que esse passo é desnecessário, porque apenas MappingJacksonHttpMessageConverter é usado, estou certo?EDIT: como funciona agora

Setter no bean de entidade:

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

Deserialize o método em 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