¿Cómo serializar CUALQUIER Objeto en un URI?

Mi pregunta básica: ¿hay algo construido que ya lo hace automáticamente (no tiene que ser parte de una biblioteca / paquete popular)? Las principales cosas con las que trabajo son Spring (MVC) y Jackson2.

Entiendo que hay algunas maneras manuales de hacer esto:

Cree un método en cada clase que serialice sus propiedades específicas enproperty=value& forma (tipo de apesta porque es un montón de duplicación lógica, me parece).Cree una función que acepte un objeto y use la reflexión para leer dinámicamente todas las propiedades (supongo que los captadores), y cree la cadena obteniendo cada una. Supongo que esta es la forma en que Jackson trabaja para la serialización / deserialización en general, pero realmente no lo sé.Utilice alguna característica de Jackson para serializar el objeto de forma personalizada. He investigado los serializadores personalizados, pero parece que son específicos de una clase (por lo que tendría que crear uno para cada Clase que estoy tratando de serializar), mientras esperaba una forma genérica. Solo tengo problemas para entender cómo aplicar uno universalmente a los objetos. Algunos de los enlaces:http://techtraits.com/Programming/2011/11/20/using-custom-serializers-with-jackson/http://wiki.fasterxml.com/JacksonHowToCustomSerializersUtilizarObjectMapper.convertValue(object, HashMap.class);, iterar sobre elHashMapde los pares clave / valor, y construir la cadena (que eslo que estoy usando ahora, pero siento que las conversiones son excesivas?).Supongo que hay otros en los que no estoy pensando.

El post principal que he mirado esJava: obtener las propiedades de una clase para construir una representación de cadena

Mi punto es que tengo varias clases que quiero poder serializar sin tener que especificar algo específico para cada una. Es por eso que estoy pensando que una función que use la reflexión (n. ° 2 arriba) es la única manera de manejar esto (si tengo que hacerlo manualmente).

Si ayuda, un ejemplo de lo que quiero decir es con, por ejemplo, estas dos clases:

public class C1 {
    private String C1prop1;
    private String C1prop2;
    private String C1prop3;

    // Getters and setters for the 3 properties
}

public class C2 {
    private String C2prop1;
    private String C2prop2;
    private String C2prop3;

    // Getters and setters for the 3 properties
}

(No, los nombres de las propiedades y las convenciones no son lo que está usando mi aplicación real, es solo un ejemplo)

Los resultados de la serialización seríanC1prop1=value&C1prop2=value&C1prop3=value yC2prop1=value&C2prop2=value&C2prop3=value, pero solo hay un lugar que define cómo ocurre la serialización (ya definida en algún lugar o creada manualmente por mí).

Así que mi idea es que tendré que terminar usando una forma de la siguiente (tomada de la publicación que vinculé arriba):

public String toString() {
    StringBuilder sb = new StringBuilder();
    try {
        Class c = Class.forName(this.getClass().getName());
        Method m[] = c.getDeclaredMethods();
        Object oo;
        for (int i = 0; i < m.length; i++)
        if (m[i].getName().startsWith("get")) {
            oo = m[i].invoke(this, null);
            sb.append(m[i].getName().substring(3) + ":"
                      + String.valueOf(oo) + "\n");
        }
    } catch (Throwable e) {
        System.err.println(e);
    }
    return sb.toString();
}

Y modifíquelo para aceptar un objeto, y cambie el formato de los elementos adjuntos alStringBuilder. Eso funciona para mí, no necesito ayuda para modificar esto ahora.

Entonces, nuevamente, mi pregunta principal es si hay algo que ya maneja esta serialización (potencialmente simple) en lugar de que yo deba (rápidamente) modificar la función anterior, incluso si tengo que especificar cómo tratar cada propiedad y valor y cómo combinar ¿cada?

Si ayuda, el fondo de esto es que estoy usando unRestTemplate&nbsp;(Spring) para realizar una solicitud GET a un servidor diferente, y quiero pasar las propiedades / valores de un objeto específico en la URL. Entiendo que puedo usar algo como:

restTemplate.getForObject("URL?C1prop1={C1Prop1}&...", String.class, C1Object);

Creo que las propiedades se asignarán automáticamente. Pero como dije, no quiero tener que crear una plantilla de URL y un método diferente para cada tipo de objeto. Espero tener algo como lo siguiente:

public String getRequest(String url, Object obj) {
    String serializedUri = SERIALIZE_URI(obj);
    String response = restTemplate.getForObject("URL?" + serializedUri, String.class);
    return response;
}

dóndeSERIALIZE_URI&nbsp;Es donde lo manejaría. Y podría llamarlo así.getRequest("whatever", C1Object);&nbsp;ygetRequest("whateverElse", C2Object);.