Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Spring: spring, rest, controller

Может ли @RestController возвращать XML, а не JSON?

Вопрос проверяет понимание механизмов content negotiation и форматов ответа в Spring REST controllers.

Короткий ответ

Да, @RestController может возвращать XML вместо JSON. Для этого нужно добавить зависимость для XML-сериализации (например, Jackson XML или JAXB) и настроить производителей медиа-типов. Клиент может запрашивать XML через заголовок Accept: application/xml, а Spring автоматически выберет подходящий формат на основе content negotiation.

Длинный ответ

Spring MVC поддерживает различные форматы ответов через механизм content negotiation.

Настройка XML-сериализации:

  1. Добавление зависимости:

    <dependency>
        <groupId com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>
  2. Настройка производителей медиа-типов:
    Spring автоматически регистрирует MappingJackson2XmlHttpMessageConverter при наличии зависимости

  3. 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 при наличии соответствующих зависимостей.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Spring

    Spring

Ключевые слова

#spring

#rest

#controller

Подпишись на Java Developer в телеграм