spring无法反序列化json数组

nhn9ugyo  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(385)

我有这张表格
register.html
我正在尝试使用requestbody中输入字段的值,以便我的应用程序可以创建一个用户
registrationcontrollerrest.java
registrationservice.java
但每次它都会打印出以下错误

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `de.dummyapt.internship.registration.RegistrationRequest` from Array value (token `JsonToken.START_ARRAY`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `de.dummyapt.internship.registration.RegistrationRequest` from Array value (token `JsonToken.START_ARRAY`) at [Source: (PushbackInputStream); line: 1, column: 1]]
njthzxwz

njthzxwz1#

正如您的错误消息所描述的,spring试图从json数组解析“registrationrequest”类型的对象。
要实现这一点,必须将json对象传递给控制器,而不是数组。目前,您正在将数据序列化为数组( serializeArray() )

kognpnkq

kognpnkq2#

您应该将formdata作为json对象传递,或者如果您想将formdata作为列表传递,您应该将控制器更改为从ui接受列表。

yqyhoc1h

yqyhoc1h3#

从register.html通过html表单/提交发送用户数据。在这种情况下,您需要在控制器方法上使用@modelattribute注解。

@PostMapping("/register")
public String register(@ModelAttribute RegistrationRequest request) {
    return registrationService.register(request);
}

@自动在html名称属性和变量之间进行modelattribute注解Map。所以,您应该在表单上添加name属性,并将它们和registrationrequest类中变量的名称相匹配

<form id="registerForm" th:action="@{/register}" method="post">
                <fieldset>
                    <label for="username">Username</label>
                    <input type="text" class="fadeIn second" id="username" name="username" required>
                    <label for="email">Email address</label>
                    <input type="email" class="fadeIn second" id="email" name="email" required>
                    <label for="password">Password</label>
                    <input type="password" class="fadeIn third" id="password" name="password" required>
                    <label for="passwordConfirmation">Confirm password</label>
                    <input type="password" class="fadeIn third" id="passwordConfirmation" name="passwordConfirmation" required>
                    <div class="form-actions">
                        <button type="submit" class="btn btn-primary fadeIn fourth button"
                            id="submitRegistration">Register</button>
                    </div>
                </fieldset>
            </form>

或者,您可以使用javascript创建json对象,并使用ajax发送该数据。

相关问题