Kotlin Spring Boot form-urlencoded POST-запросы с картой

Я только начал играть с Kotlin и Spring Boot и решил написать простую конечную точку, которая принимает запрос POST с формой-urlencoded. Мне не хотелось писать фактический класс данных для тела, поэтому я попытался просто использовать карту для тела, надеясь, что могу просто получить доступ к парам ключ / значение. Я сначала попробовал:

@RestController class MyController { @RequestMapping(value = "/endpoint", method = arrayOf(RequestMethod.POST), consumes = arrayOf("application/x-www-form-urlencoded")) fun myEndpoint(@RequestBody body: Map<String,String>): String { // Do stuff } } 

Но это привело к ошибке 415 о неподдерживаемом типе носителей …, который я прочитал, объясняется использованием @RequestBody и POST-сообщений с формами-urlencoded. Затем я попытался использовать @ModelAttribute, но затем получил

Не удалось создать экземпляр [java.util.Map]: указанный класс – это интерфейс

Не удивительно, поскольку я был полностью взломан. Я также пробовал без каких-либо аннотаций для тела, но затем ни один из параметров формы не был введен. Я знаю, что я мог бы добавить класс данных для решения этой проблемы, но я хотел бы знать, можно ли это сделать в общем случае с помощью Map, поскольку я уже делал подобное в Java раньше.

Благодарю.

Вам необходимо аннотировать свой параметр body с помощью @RequestParam

  @RequestMapping(value = "/endpoint", method = [(RequestMethod.POST)], consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE]) fun myEndpoint(@RequestParam body: Map<String,String>): String { return //... } 

(Также обратите внимание, что я удалил вызовы arrayOf в пользу литералов массива, которые доступны для аннотаций с Kotlin 1.2)

Intereting Posts
Выполнение команды Kotlin if, даже если false Как избежать метода класса фабрики kotlin по подтипу? Котлинское умножение между обнуляемыми и невалютными ошибками float даже с нулевой проверкой Cant 'получить переменную в секции buildscript Как получить завершение кода IntelliJ IDEA для импорта статических методов Java в качестве функций верхнего уровня Kotlin? Котлин, Прогуард и лямбда Gradle не может разрешать ссылки с другого модуля Использование функции замены в KOTLIN Сделать HTTP-запрос при нажатии кнопки в Kotlin Невозможно сделать API-адрес urlfetch.Fetch в потоке, который не является ни потоком исходного запроса, ни потоком, созданным ThreadManager JPA, Spring Data и Kotlin – Сохранение записей Kotlin и javax.validation.constraints.NotNull «несоответствие типа приемника» с фрагментом и тостом Anko IDEA IllegalStateException: служба умирает при запуске теста JUnit с Kotlin Переместить определение ViewModel в метод уровня пакета