【问题标题】:Spring Post Form @RequestBody cannot be bound as MultiValueMapSpring Post Form @RequestBody 不能绑定为 MultiValueMap
【发布时间】:2018-05-23 09:17:32
【问题描述】:

我的控制器是这样的:

@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 获取数据,我显然不能,因为数据在正文中。

【问题讨论】:

    标签: forms spring-boot post kotlin


    【解决方案1】:

    我试图获取datetime_pick,但是表单中没有这个参数,有startDate。骗我XD。

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 2011-09-28
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 2013-10-27
      相关资源
      最近更新 更多