Spring Post Form @RequestBody не может быть привязан как MultiValueMap - PullRequest
0 голосов
/ 23 мая 2018

Мой контроллер такой:

@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 Я, очевидно, не смогу, потому что данные находятся в теле.

1 Ответ

0 голосов
/ 23 мая 2018

Я пытался получить datetime_pick, но в форме такого параметра не было, есть startDate.Тупой мне XD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...