Как я могу сказать Джерси использовать мой MessageBodyReader вместо JAXB?

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

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

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

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

person Nate    schedule 23.09.2010    source источник
comment
MessageBodyReaders предназначены для использования всего тела сообщения. Они не используются для потребления отдельных значений формы. Если все сообщение было вашей моделью, используйте ввод TestModel без @FormParam.   -  person Bryant Luk    schedule 30.09.2010


Ответы (2)


  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>

person cgalleguillosm    schedule 18.11.2011

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

  • У вас есть аннотация @Provider на вашем ридере?
  • Правильно ли вы реализовали метод isReadable в своем ридере?
  • Есть ли у вас соответствующая аннотация @Consumes на устройстве чтения, соответствует ли его тип носителя типу носителя, указанному в вашем сервисном методе?
person bdoughan    schedule 27.09.2010