Служба Spring REST XML не принимает XML в качестве заголовка «принять» - PullRequest
1 голос
/ 17 января 2012

У меня определено несколько служб REST, которые в настоящее время возвращают отформатированные объекты JSON в качестве тел ответа служб. Я пытаюсь сделать так, чтобы этот сервис также принимал XML как новое требование, хотя и не принимает это.

Я слежу за примером spring-mvc-showcase и настроил мои pom.xml зависимости почти одинаково, мои определения служб также очень просты.

@Controller
@RequestMapping(value = "api/sales/*")
public class SalesController {

    @RequestMapping(value = "/countries", method = RequestMethod.GET)
    @ResponseBody
    public List<NamedEntity> getCountries() {

NamedEntity имеет соответствующую @XmlRootElement аннотацию.

Может ли кто-нибудь объяснить самые основные требования, которые мне понадобятся для получения XML в виде ResponseBody, который использует пример проекта spring-mvc-showcase .

РЕДАКТИРОВАТЬ : добавлен образец пружины MVC.

Пример из витрины spring-mvc выглядит следующим образом:

package org.springframework.samples.mvc.messageconverters;

@Controller
@RequestMapping("messageconverters/*")
public class MessageConvertersController {

    @RequestMapping(value="/xml", method=RequestMethod.GET)
    public @ResponseBody JavaBean writeXml() {
        return new JavaBean("bar", "fruit");

Ответы [ 4 ]

1 голос
/ 17 января 2012

Проверьте заголовок запроса, клиент должен иметь «application / xml» в заголовке, а не «application / json»

Сказав это, убедитесь, что вы зарегистрировали соответствующее сообщениеконвертер для вашего объекта.Если вы используете Java 6, Spring автоматически обнаружит JAXB в вашем пути к классам, иначе вы можете вручную добавить конвертер.

0 голосов
/ 29 сентября 2017

попробуйте этот конфиг диспетчера сервлетов.

<mvc:annotation-driven
        content-negotiation-manager="contentManager" />

<bean id="contentManager"
        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false" />
        <property name="ignoreAcceptHeader" value="false" />
        <property name="defaultContentType" value="application/json" />
        <property name="useJaf" value="false" />
    </bean>

и некоторая зависимость

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.4.3</version>
        </dependency>
0 голосов
/ 20 января 2012

Вам необходимо отправить «application / xml», а не «application / application + xml».Также рассмотрите возможность использования:

@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"})

Это гарантирует, что ваш метод отвечает только на эти типы носителей и отклоняет другие с кодом состояния 406 HTTP.

0 голосов
/ 17 января 2012

Добавьте @Produces ("application / xml") в getCountries ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...