Spring Post Form @RequestBody不能绑定为MultiValueMap

时间:2018-05-23 09:17:33

标签: forms spring-boot post kotlin

我的控制器是:

@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>

问题是我得到了一个N​​PE(空指针)我尝试了各种各样的东西来正常使用函数体。我的意思是我可以通过拆分url编码的字符串得到它,但我有点想把它作为地图。 我也可以创建一个函数来自己将@RequestBody params: String转换为地图,但必须有更好的方法将身体作为地图。 NPE必须位于断言周围(!!

如果我尝试将数据设为@RequestParam param: String,我显然不能,因为数据存在于正文中。

1 个答案:

答案 0 :(得分:0)

我试图获得datetime_pick,但表单中没有此类参数,有startDate。愚蠢的我XD。