我的控制器是:
@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(空指针)我尝试了各种各样的东西来正常使用函数体。我的意思是我可以通过拆分url编码的字符串得到它,但我有点想把它作为地图。
我也可以创建一个函数来自己将@RequestBody params: String
转换为地图,但必须有更好的方法将身体作为地图。 NPE必须位于断言周围(!!
)
如果我尝试将数据设为@RequestParam param: String
,我显然不能,因为数据存在于正文中。
答案 0 :(得分:0)
我试图获得datetime_pick
,但表单中没有此类参数,有startDate
。愚蠢的我XD。