#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 из коробки, но это не так.