Como serializar qualquer objeto em um URI?

Minha pergunta básica: existe alguma coisa construída que já faz isso automaticamente (não precisa fazer parte de uma biblioteca / pacote popular)? As principais coisas com as quais estou trabalhando são Spring (MVC) e Jackson2.

Eu entendo que existem algumas maneiras manuais para fazer isso:

Crie um método em cada classe que serialize suas propriedades específicas emproperty=value& forma (meio que fede porque é um monte de duplicação lógica, eu sinto).Crie uma função que aceite um objeto e use o reflexo para ler dinamicamente todas as propriedades (acho que os getters) e construa a string obtendo cada uma delas. Estou assumindo que é assim que Jackson trabalha para serialização / desserialização em geral, mas eu realmente não sei.Use algum recurso do Jackson para serializar o objeto de forma personalizada. Eu pesquisei serializadores personalizados, mas parece que eles são específicos de uma classe (então eu teria que criar um para cada classe que estou tentando serializar), enquanto eu estava esperando por uma maneira genérica. Estou apenas tendo dificuldade em entender como aplicar universalmente a objetos. Alguns dos links:http://techtraits.com/Programming/2011/11/20/using-custom-serializers-with-jackson/http://wiki.fasterxml.com/JacksonHowToCustomSerializersUsarObjectMapper.convertValue(object, HashMap.class);, iterar sobre oHashMappares chave / valor, e construa a string (que éo que estou usando agora, mas eu sinto que as conversões são excessivas?Eu estou supondo que há outros que não estou pensando.

O post principal que eu olhei éJava: Obtendo as propriedades de uma classe para construir uma representação de string

Meu ponto é que eu tenho várias classes que eu quero ser capaz de serializar sem ter que especificar algo específico para cada um. É por isso que estou pensando que uma função usando reflexão (# 2 acima) é a única maneira de lidar com isso (se eu tiver que fazer isso manualmente).

Se isso ajudar, um exemplo do que quero dizer é com, digamos, essas duas classes:

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
}

(não, os nomes e convenções das propriedades não são o que meu aplicativo real está usando, é apenas um exemplo)

Os resultados da serialização seriamC1prop1=value&C1prop2=value&C1prop3=value eC2prop1=value&C2prop2=value&C2prop3=value, mas há apenas um lugar que define como a serialização acontece (já definida em algum lugar, ou criada manualmente por mim).

Então, minha ideia é que terei que usar uma das seguintes formas (tiradas do post que eu coloquei acima):

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();
}

E modifique-o para aceitar um objeto e alterar o formato dos itens anexados aoStringBuilder. Isso funciona para mim, não preciso de ajuda para modificar isso agora.

Então, novamente, minha principal questão é se há algo que já lida com essa serialização (simples) em vez de eu ter que (rapidamente) modificar a função acima, mesmo que eu precise especificar como lidar com cada propriedade e valor e como combinar cada?

Se isso ajuda, o pano de fundo disso é que eu estou usando umRestTemplate&nbsp;(Spring) para fazer um pedido GET para um servidor diferente, e eu quero passar propriedades / valores de um objeto específico no URL. Eu entendo que posso usar algo como:

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

Eu acredito que as propriedades serão automaticamente mapeadas. Mas, como eu disse, não quero ter que criar um modelo e um método de URL diferentes para cada tipo de objeto. Eu estou esperando ter algo como o seguinte:

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

OndeSERIALIZE_URI&nbsp;é onde eu lidaria com isso. E eu poderia chamar assimgetRequest("whatever", C1Object);&nbsp;egetRequest("whateverElse", C2Object);.