В настоящее время я работаю над формой редактирования пользователем.Spring + Thymeleaf binding form NullpointerException
У меня есть пользовательский объект со следующей структурой (псевдо-код):
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;
}
в моем template (i use thymeleaf) Я связываю эти объекты следующим образом:
<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-Me что шаблон/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]
Всех поля передаются правильно, если электронное поле ребенка-объект.
Я понятия не имею, почему возникает ошибка, структура же, данные корректны и самое смешное, когда я хватаю элемент детской электронной почты в отдельном объекте идет его
Кто-нибудь есть идея ?
Заранее спасибо.
EDIT: класс Email:
@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);
}
post com.example.user.model.Email и EMail.java –
жаль, что это была моя ошибка. я исправил правописание словарного запаса для кода. класс EMail аналогичен классу электронной почты. У меня есть код на моей работе. Я думаю, что это зависит от аннотации для спящего режима. классы, которые я использую для контроллера, одинаковы для базы данных (сущностей). завтра я обновлю код. –
вы также можете добавить метод обработки почты, так как у вас есть только метод обработки get – Aeseir