Вопрос проверяет понимание механизмов content negotiation и форматов ответа в Spring REST controllers.
Да, @RestController может возвращать XML вместо JSON. Для этого нужно добавить зависимость для XML-сериализации (например, Jackson XML или JAXB) и настроить производителей медиа-типов. Клиент может запрашивать XML через заголовок Accept: application/xml, а Spring автоматически выберет подходящий формат на основе content negotiation.
Spring MVC поддерживает различные форматы ответов через механизм content negotiation.
Настройка XML-сериализации:
Добавление зависимости:
<dependency>
<groupId com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>Настройка производителей медиа-типов:
Spring автоматически регистрирует MappingJackson2XmlHttpMessageConverter при наличии зависимости
Content negotiation:
Через заголовок Accept: Accept: application/xml
Через параметр URL: /api/data?format=xml
Через расширение: /api/data.xml
Пример контроллера:
@RestController
public class UserController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}
// Класс User должен поддерживать XML-сериализацию
public class User {
private Long id;
private String name;
// геттеры и сеттеры обязательны для XML
}Явное указание формата:
@GetMapping(value = "/user/{id}", produces = {
MediaType.APPLICATION_JSON_VALUE,
MediaType.APPLICATION_XML_VALUE
})
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}Настройка приоритета форматов:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer
.favorParameter(true)
.parameterName("mediaType")
.defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML)
.mediaType("json", MediaType.APPLICATION_JSON);
}
}Вывод: @RestController гибко поддерживает различные форматы ответов через content negotiation, включая XML при наличии соответствующих зависимостей.