gpt4 book ai didi

java - Spring + Thymeleaf 绑定(bind)形成 NullpointerException

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:26 25 4
gpt4 key购买 nike

我目前正在处理用户编辑表单。

我有一个具有以下结构的用户对象(伪代码):

User

String name,
int age,
Address adress,
Email email,
User child,

getter/setter

现在,我将该对象作为对象放入 Model 中,如下所示:

@RequestMapping(value = "/{login}/edit", method = RequestMethod.GET)
public ModelAndView editUserByLogin(@PathVariable("login") final String login) {
final User currentUser = UserRepository.findPersonByLogin(login);

ModelAndView mav = new ModelAndView(URL_EDIT_USER);
mav.addObject(MODEL_USER, currentUser);

return mav;
}

在我的模板(我使用thymeleaf)中,我像这样绑定(bind)这些对象:

<form class="form-horizontal" method="post" >
<div class="form-group">
<label class="col-sm-2 control-label" th:text="#{user.name}">name</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{user.name}" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" th:text="#{user.address.street}">name</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{user.address.street}" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" th:text="#{user.child.email.value}">name</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{user.child.email.value}" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" th:text="#{user.child.address.street}">name</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{user.child.address.street}" />
</div>
</div>
</form>

在 GET 方法中,模板/html 显示了我期望的正确数据。现在我编辑字段并提交表单,然后出现以下错误:

java.lang.NullPointerException: null
at com.example.user.model.Email.hashCode(EMail.java:66) ~[classes/:na]
at java.lang.Object.toString(Unknown Source) ~[na:1.8.0_25]
at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25]
at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25]
at org.springframework.validation.FieldError.toString(FieldError.java:102) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE]
at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25]
at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25]
at org.springframework.validation.AbstractErrors.toString(AbstractErrors.java:243) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE]
at org.springframework.validation.BindException.getMessage(BindException.java:284) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE]
at java.lang.Throwable.getLocalizedMessage(Unknown Source) ~[na:1.8.0_25]
at java.lang.Throwable.toString(Unknown Source) ~[na:1.8.0_25]
at java.lang.String.valueOf(Unknown Source) ~[na:1.8.0_25]
at java.lang.StringBuilder.append(Unknown Source) ~[na:1.8.0_25]

除子对象的电子邮件字段外,所有字段均正确传输。

我不知道为什么会发生错误,结构是相同的,数据是有效的,有趣的是,当我在单独的对象中抓取子电子邮件元素时,它就出现了

有人有想法吗?

提前致谢。

编辑:电子邮件类别:

@Entity(name="Email")
public class Email implements Serializable
{
private static final long serialVersionUID = 6891079722082340011L;

@Id()
@GeneratedValue(strategy=GenerationType.AUTO)
@Expose
protected Long eMailId;
@Expose
protected String value;

//getter/setter

@Override
public boolean equals(Object obj)
{
if(obj instanceof EMail){
return value.equals(((Email) obj).getValue());
}
return false;
}

@Override
public int hashCode()
{
return value.hashCode();
}
}

发帖方法:

@RequestMapping(value = "/{login}/edit", method = RequestMethod.POST)
public ModelAndView updateUser(@PathVariable("login") final String login, @ModelAttribute final User webUser) {
final Person repoUser = personRepository.findPersonByLogin(login);
repoUser.updateWith(webUser);

return new ModelAndView("redirect:" + URL_USERS_OVERVIEW);
}

最佳答案

NullPointerException 发生在您的 Email.hashCode() 方法中。查看您的代码,如果 value 为 null,则可能会发生这种情况。

您发布的模板不包含 user.email.value 字段,因此这很可能是它为空的原因。

您需要为用户电子邮件添加一个字段,或者更改 hashCode 方法,以便它处理 null 值。

关于java - Spring + Thymeleaf 绑定(bind)形成 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27273754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com