Как сериализировать примитивы Java с помощью Джерси REST

В моем приложении я использую Джерси REST для сериализации сложных объектов. Это работает довольно прекрасное. Но существуют некоторые метод, которые просто возвращают интервал или булевскую переменную.

Джерси не может обработать типы примитивов (к моему знанию), вероятно, потому что они не аннотированы, и Джерси не имеет никакой аннотации по умолчанию для них. Я работал вокруг этого путем создания составных типов как RestBoolean или RestInteger, которые просто содержат международное или булево значение и имеют соответствующие аннотации.

Нет ли более легкий путь, чем запись этих контейнерных объектов?

8
задан Olvagor 13 April 2010 в 12:40
поделиться

2 ответа

Вы пишете услугу или клиент? В конце службы вы просто напишите MessageBodyWriter , чтобы сериализовать поток данных в объект Java для ваших типов. В моих случаях использования сервисов я записываю вывод в JSON или XML, а в случае XML я просто добавляю одну аннотацию JAXB поверх моих классов, и все готово.

Вы читали об этом в Руководстве пользователя Джерси?

3.6. Добавление поддержки для новых представлений

3
ответ дан 5 December 2019 в 11:23
поделиться

На самом деле лучше всего написать собственный поставщик ContextResolver, подобный приведенному ниже, который использует естественное построение JSON.

   @Provider
   public class YourContextResolver implements ContextResolver<JAXBContext> {

    private JAXBContext context;
    private Class<?>[] types = { YourSpecialBean.class };

    public YourContextResolver() throws Exception {
        this.context = new JSONJAXBContext(
                JSONConfiguration.natural().build(), types);
    }

    public JAXBContext getContext(Class<?> objectType) {
        for (int i = 0; i < this.types.length; i++)
            if (this.types[i].equals(objectType)) return context;

        return null;
    }
}

Единственное, на что следует обратить внимание, - это класс YourSpecialBean.class в классе []. Это определяет массив типов классов, которые этот поставщик разрешит естественным образом.

2
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: