Deserialización de JSON con múltiples tipos en un campo

Me gustaría deserializar JSON (con Jackson 1.9.11 y RestTemplate 1.0.1), en el que un campo puede tener más significados de tipo, por ejemplo:

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

o

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

Uno u otro caso funciona correctamente con un establecedor de tipo específico (String o clase de respuesta personalizada), pero cuando pongo en mi entidad el organizador de invalidación de beans para poder manejar ambos casos, se lanza una excepción:

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]

Estaba pensando en tres soluciones, pero no conseguí ninguna de ellas trabajando:

usando solo el creador de cadenas y dentro de ObjectMapper para desmarcar toda la cadena, si no es igual a "error", pero cuando aparece JS Array, no es una cadena por lo que no se usa ningún creador de cadenas :(use el manejo de tipo polimórfico (anotación de @JsonTypeInfo) con la propia extensión de JsonDeserializer. Todavía estoy intentando entender esto e implementarlo.Crear una lista de HttpMessageConverter y colocar dentro de todos los conversores de mensajes, que puedo usar. Pero creo que este paso es innecesario, porque solo se usa MappingJacksonHttpMessageConverter, ¿verdad?EDIT: como funciona ahora

Setter en entidad bean:

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

Deserialize método en 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;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta