2010-09-23 6 views
1

В принципе, у меня есть некоторые модели, которые используют JAXB. Тем не менее, у меня есть некоторые пользовательские функции для преобразования в JSON и обратно, поэтому я хочу написать свой собственный MessageBodyReader/Writer, чтобы выполнить эту работу для меня.Как я могу сказать Джерси использовать мой MessageBodyReader вместо JAXB?

Прямо сейчас, часть записи выполнена: если я верну одну из своих моделей из ресурса REST, она проходит через моего автора. Но когда я пытаюсь принять модель как FormParam, он не использует мой MessageBodyReader и вместо этого пытается его развязать с помощью JAXB (который не работает).

Итак, как я могу сказать, что Джерси использует мой Reader вместо этого?

public TestModel testProvider(@FormParam("model") TestModel input){ //doesnt work 
    return new TestModel(); //this part works! 
} 
+0

MessageBodyReaders предназначены для потребления всего тела сообщения. Они не используются, чтобы потреблять индивидуальные значения формы. Если бы все сообщение было вашей моделью вместо этого, используйте «TestModel input» без @FormParam. –

ответ

0

Поскольку ваш писатель работает, но ваш читатель этого не делает, я предполагаю, что вы что-то пропустили в своей конфигурации. Некоторые вещи для проверки:

  • У вас есть аннотация @Provider на вашем читателе?
  • Вы правильно использовали метод isReadable для своего читателя?
  • У вас есть соответствующая аннотация @Consumes для читателя, соответствует ли ее тип носителя типу носителя, указанному в вашем методе обслуживания?
1
  1. Отметить как @Provider
  2. Добавьте в конфигурацию web.xml EX:


<init-param><param-name>com.sun.jersey.config.property.packages</param-name> <param-value> your.package.that.contains.the.provider </param-value> </init-param>