/ домашние животные дают ответ json. Я хотел бы использовать /pets.xml, чтобы получить ответ xml, сохраняя при этом @RequestMapping («домашние животные») на контроллере. я могу использовать
@RequestMapping("/index") @RequestMapping("/index.xml")
как обходной путь, но это не то, что я ищу.
@RestController @RequestMapping("pets") class PetController { /*code*/ @RequestMapping(produces = arrayOf("application/json")) fun findPetsJson(): List<PetDto> { return petService.findAll() } // this results in /pets/.xml for the xml response. I'm aiming for /pets.xml @RequestMapping(".xml", produces = arrayOf("application/xml")) fun findPetsXml(): List<PetDto> { return petService.findAll() } }
По умолчанию Spring MVC RequestMappingHandlerMapping
добавит несколько сопоставлений для ваших аннотированных методов @RequestMapping
(или классов). Он будет рядом с настроенным, добавьте один финал с .*
Чтобы он соответствовал расширениям.
Поэтому в вашем случае /pets.xml
уже поддерживается сопоставлением /pets.*
которое создается по умолчанию. Теперь ваши produces
ограничивают только принимаемые запросы на основе заголовка запроса принятия.
По умолчанию расширение файла имеет приоритет над заголовком Content-Type
.
Достаточно одной функции. Вам просто нужно добавить arrayOf («application / json», «application / xml»), и он производит оба (он фактически делает это для обоих, даже если вы его удалите, но это явно так.
@RestController @RequestMapping("pets") class PetController { /*code*/ @RequestMapping(produces = arrayOf("application/json", "application/xml), method = RequestMethod.GET) fun findPetsJson(): List<PetDto> { return petService.findAll() } }
Этот код позволяет взаимодействовать как с /pets.json, так и с / pets.xml