тип = Неприемлемо, статус = 406 Ошибка в Spring Rest для создания XML

#rest #spring-boot

#rest #весенняя загрузка

Вопрос:

Я работаю над Spring Rest, и в моем приложении Spring Rest, если я попытаюсь создать json, все будет в порядке. Я вижу это в браузере. Ошибки нет.

Но если я хочу создать XML, я использую produce = «application / xml» или produce=MediaType.TEXT_XML_VALUE и я получаю эту ошибку:

 Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Oct 23 18:30:51 EEST 2016
There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation
  

Мой код rest:

 package getExample;

import java.util.ArrayList;
import java.util.List;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import pojo.Address;
import pojo.Person;

@RestController
public class GetExampleController {

    @RequestMapping(value = "getExample",method=RequestMethod.GET,produces=MediaType.TEXT_XML_VALUE)
    public List<Person> getExample1(@RequestParam(value = "personId", defaultValue = "0") String id) {
        List<Person> personList = new ArrayList<>();
        Person person1 = new Person("1", "ilkay", "günel",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person1);

        Person person2 = new Person("2", "alican", "akkuş",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person2);

        Person person3 = new Person("3", "mustafa", "demir",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person3);

        if (id.equals("0")) {
            return personList;
        }
        else {
            return personList.subList(Integer.parseInt(id)-1, Integer.parseInt(id));
        }
    }
}
  

В чем ошибка? Почему я могу получить вывод XML? Как я могу это решить?

Ответ №1:

Вам нужно добавить jackson-dataformat-xml зависимость:

 <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>
  

В противном случае вы можете пометить свой компонент аннотациями JAXB.

Документация Spring:

Если у вас есть расширение Jackson XML (jackson-dataformat-xml) в classpath, оно будет использоваться для отображения XML-ответов, и будет работать тот же пример, который мы использовали для JSON.

Если расширение XML Джексона недоступно, будет использоваться JAXB (предоставляемый по умолчанию в JDK) с дополнительным требованием, чтобы [ваш класс] был аннотирован как @XmlRootElement…

Чтобы заставить сервер отображать XML вместо JSON, вам, возможно, придется отправить заголовок Accept: text / xml (или использовать браузер).

Комментарии:

1. Спасибо — это было именно то, чего мне не хватало. Думал, что spring boot starter включает поддержку xml из коробки, но это не так.