Мой контроллер такой:
@PostMapping("/car/{id}/book", consumes =
[MediaType.APPLICATION_FORM_URLENCODED_VALUE])
fun orderProcess(model: Model,
@PathVariable id: Int,
@Valid customerBindingModel: CustomerBindingModel,
bindingResult: BindingResult,
request: HttpServletRequest,
@RequestBody multiParams: MultiValueMap<String, String>) : String {
println(multiParams)
val params = multiParams.toSingleValueMap()
println(params)
val startDateString = params["datetime_pick"]!!
val endDateString = params["datetime_off"]!!
...
}
Мой взгляд такой:
<form th:action="@{/car/{id}/book(id=${car.id})}" id="confirmForm" method="POST">
<div class="formrow">
<input type="hidden" id="startDate" name="startDate" th:value="${param.datetime_pick[0]}" />
<input type="hidden" id="endDate" name="endDate" th:value="${param.datetime_off[0]}" />
<label for="email">Email</label>
<input type="email" id="email" name="email" th:value="${customer.email}" />
<label for="phoneNumber">Телефон</label>
<input type="tel" id="phoneNumber" name="phoneNumber" th:value="${customer.phoneNumber}" />
<script th:src="@{/intl-tel-input-12.1.0/build/js/intlTelInput.js}"></script>
<!-- Bootstrap -->
<br/>
<label class="check-container">Сега ще платя депозит:
<input type="checkbox" name="payDepositNow" th:checked="${payDepositNow}">
<span class="checkmark"></span>
</label>
<script>
$("#phoneNumber").intlTelInput({
nationalMode: false,
preferredCountries: ['bg'],
});
</script>
</div>
Проблема в том, что я получаю NPE (нулевой указатель) Iперепробовал всевозможные вещи, чтобы получить тело функции нормально.Я имею в виду, что я мог бы просто получить это путем разбиения строки в кодировке URL, но я как бы хотел получить ее как карту.Я мог бы также сделать функцию для преобразования @RequestBody params: String
в карту самостоятельно, но должен быть лучший способ получить тело как карту.NPE должно быть где-то около утверждений (!!
)
Если я попытаюсь получить данные как @RequestParam param: String
Я, очевидно, не смогу, потому что данные находятся в теле.