Как сериализовать ЛЮБОЙ объект в URI?

Мой основной вопрос: есть ли что-нибудь построенное, что уже делает это автоматически (не обязательно должно быть частью популярной библиотеки / пакета)? Основными вещами, с которыми я работаю, являются Spring (MVC) и Jackson2.

Я понимаю, что есть несколько ручных способов сделать это:

Создайте метод в каждом классе, который сериализует его конкретные свойства вproperty=value& форма (вроде воняет, потому что это куча логического дублирования, я чувствую).Создайте функцию, которая принимает объект и использует отражение для динамического чтения всех свойств (я думаю, получателей), и строите строку, получая каждое из них. Я предполагаю, что именно так Джексон работает для сериализации / десериализации в целом, но я действительно не знаю.Используйте некоторую особенность Джексона для индивидуальной сериализации объекта. Я исследовал пользовательские сериализаторы, но кажется, что они специфичны для класса (поэтому мне придется создавать по одному для каждого класса, который я пытаюсь сериализовать), в то время как я надеялся на общий способ. У меня просто проблемы с пониманием того, как применять один универсально к объектам. Несколько ссылок:http://techtraits.com/Programming/2011/11/20/using-custom-serializers-with-jackson/http://wiki.fasterxml.com/JacksonHowToCustomSerializersиспользованиеObjectMapper.convertValue(object, HashMap.class);перебратьHashMapпары ключ / значение и построить строку (котораячто я использую сейчас, но я чувствую, что преобразования являются чрезмерными?).Я предполагаю, что есть другие, о которых я не думаю.

Основной пост, который я посмотрел,Java: получение свойств класса для построения строкового представления

Моя точка зрения заключается в том, что у меня есть несколько классов, которые я хочу иметь возможность сериализовать, не указывая что-то конкретное для каждого. Вот почему я думаю, что функция, использующая отражение (# 2 выше), является единственным способом справиться с этим (если мне нужно сделать это вручную).

Если это поможет, пример того, что я имею в виду, скажем, с этими двумя классами:

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
}

(нет, имена свойств и соглашения - это не то, что использует мое реальное приложение, это просто пример)

Результаты сериализации будутC1prop1=value&C1prop2=value&C1prop3=value а такжеC2prop1=value&C2prop2=value&C2prop3=value, но есть только одно место, которое определяет, как происходит сериализация (уже определенная где-то или созданная мной вручную).

Так что моя идея заключается в том, что мне придется использовать следующую форму (взято из поста, на который я ссылался выше):

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

И измените его, чтобы принять объект, и измените формат элементов, добавляемых кStringBuilder, Это работает для меня, мне не нужна помощь, чтобы изменить это сейчас.

Итак, еще раз, мой главный вопрос: есть ли что-то, что уже обрабатывает эту (потенциально простую) сериализацию вместо того, чтобы мне пришлось (быстро) изменять вышеописанную функцию, даже если мне нужно указать, как обращаться с каждым свойством и значением и как комбинировать каждый?

Если это помогает, фоном этого является то, что я используюRestTemplate&nbsp;(Spring), чтобы сделать запрос GET на другой сервер, и я хочу передать свойства / значения конкретного объекта в URL. Я понимаю, что могу использовать что-то вроде:

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

Я считаю, что свойства будут автоматически сопоставлены. Но, как я уже сказал, я не хочу создавать разные шаблоны и методы URL для каждого типа объектов. Я надеюсь получить что-то вроде следующего:

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

гдеSERIALIZE_URI&nbsp;вот где я бы с этим справился. И я мог бы назвать это какgetRequest("whatever", C1Object);&nbsp;а такжеgetRequest("whateverElse", C2Object);.