Контроллер весеннего останова возвращает XML, если нет медиатипа [duplicate]

Другой способ - если у вас есть файл httpclient.jar, вы можете сделать это:

Вставьте свой .jar-файл в папку «libs» в вашем проекте. Затем в градиенте добавьте эту строку в свой build.gradle (Module: app)

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.0'
compile files('libs/httpcore-4.3.3.jar')
}
10
задан Rolando 4 October 2011 в 15:13
поделиться

3 ответа

Вы можете присвоить индекс качества каждому типу мультимедиа в @Produces аннотации. Вы можете сделать следующее, чтобы Джерси предпочитал JSON, если разрешены как XML, так и JSON:

@Produces({"application/json;qs=1", "application/xml;qs=.5"})
15
ответ дан Martin Matula 18 August 2018 в 05:47
поделиться
  • 1
    Итак, с помощью веб-метода, способного создавать два типа медиа, как запрашивающий указывает, какой из них он хочет? Это делается с помощью параметра запроса? Как? – Sayo Oladeji 2 January 2014 в 13:48
  • 2
    Использование заголовка запроса принятия. ( w3.org/Protocols/HTTP/HTRQ_Headers.html#z3 [/ д0]) – Martin Matula 20 January 2014 в 10:29
  • 3
    Пятно на. Благодаря! – FredArters 30 January 2015 в 18:32
  • 4
    Не работает для меня. Я использую jersey 2.15.Service возвращает XML по умолчанию ... Любая идея? – Anand 18 February 2015 в 10:17
  • 5
    @ И я обнаружил, что общий класс один не работает, независимо от того, что его реализация не знаю. Тот, который я хотел лишить себя, я поставил маркер qs на метод. Это сработало для меня. Я знаю, что есть ошибка в и вокруг 2.16, поэтому возможно обновление до более поздней версии может помочь. (старый комментарий, который я знаю, для любых будущих ссылок). – PeterS 4 August 2016 в 10:35

Вы можете указать предпочтение генерации, указав типы медиа в вашем порядке предпочтений в аннотации @Produces.

@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

В приведенном выше коде, поскольку на первом месте появляется «application / json», если не принимать заголовок указан в запросе, по умолчанию Джерси будет генерировать ответ JSON.

Использование qs (как предложил Мартин) делает предпочтение более явным, но его немного сложнее понять.

-2
ответ дан coderSam 18 August 2018 в 05:47
поделиться
  • 1
    Это не работает в текущей версии. Я не могу говорить за более старые версии Джерси. Без заголовка «accept», даже если JSON является первым в списке Produces, все равно возвращает XML. Может ли быть что-то еще, что влияет на это, помимо версии Джерси? – FredArters 30 January 2015 в 18:34
  • 2
    Это просто некорректная информация. Порядок типов носителей в аннотации Produces абсолютно не влияет на ответ по умолчанию. – Michael 26 February 2015 в 15:40
  • 3
    Ну, Oracle говорит, что порядок имеет значение: docs.oracle.com/cd/E19798-01/821-1841/6nmq2cp2c/index.html Но я думаю, что это на самом деле зависит от реализации – Gui13 15 May 2017 в 11:22

Вы должны иметь возможность задать аннотацию @Produces для указания формата возврата следующим образом:

@Produces( { "application/json" })

Как получилось, что нет заголовка accept?

1
ответ дан Ger 18 August 2018 в 05:47
поделиться
  • 1
    Это приведет к ошибке 406 всякий раз, когда запрашивается XML. OP хочет иметь возможность возвращать XML и JSON, но по умолчанию JSON не запрашивается. – idontevenseethecode 27 March 2015 в 22:45
  • 2
    вы имеете в виду @Consumes ({& quot; application / json & quot;}) – Gustavo Arias Méndez 6 April 2015 в 23:24
Другие вопросы по тегам:

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