Каков наилучший способ обновления пользовательских данных при весенней загрузке? - PullRequest
0 голосов
/ 29 апреля 2018

Мне не удается сделать правильный способ обновления данных пользователя, таких как его имя или фамилия

Контроллер:

@Controller
public class UpdateUserData {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/user/updateFirstName", method = RequestMethod.POST)
    public String changeUserFirstName(RedirectAttributes rm, final Locale locale, @Valid UserDto userDto) {
        final User user = (User) SecurityContextHolder.getContext()
            .getAuthentication()
            .getPrincipal();
        userService.changeUserFirstName(user, userDto.getFirstName());

        rm.addFlashAttribute(
            "message",
            messages.getMessage("message.updateFirstNameSuc", null, locale)
        );
        return "redirect:/user/myAccount?lang=" + locale.getLanguage();
    }
}

И это часть, относящаяся к html-странице myAccount:

<div class="manageinfo">
   <h1>Manage your personal information</h1>
   <br/>
   <div class="container">
      <div th:if="${message != null}" class="alert alert-info" 
         th:text="${message}">message</div>
      <div th:each = "user: ${user}" >
         <p>Firstname</p>
         <input type="text" th:value="${user.firstName}"><a data-toggle="modal" 
            data-target="#myModalFirstName"><i class="fa fa-pencil fa-lg"> </i></a>
      </div>
      <!-- Modal for firstName-->
      <div class="modal fade" id="myModalFirstName" role="dialog">
         <button type="button" class="close" data-dismiss="modal">&times;</button>
         <form th:action="@{/user/updateFirstName}" th:method="POST">
            <p>First Name</p>
            <input type="text" name="firstName" required="required">
            <span id="firstNameError"  style="color:#F41F0E" ></span>     
            <button type="submit" class="btn btn-default" >Save</button>
         </form>
      </div>
   </div>
</div>

UserServiceImpl:

public void changeUserFirstName(final User user, final String firstname) {
    user.setFirstName(firstname);
    userRepository.save(user);   
}

Когда я пытаюсь изменить имя, я получаю

Failed to resolve argument 2 of type Myproject.dto.UserDto
javax.validation.ValidationException: HV000028: Unexpected exception during isValid call

1 Ответ

0 голосов
/ 29 апреля 2018

Кажется, что логическая процедура обновления в порядке, я бы посоветовал проверить UserDto и его аннотацию проверки (@NotNull, @Size и т. Д.) Над его полями, так как isValid генерируется аннотацией @Valid your'e контроллер как данные не соответствует заданным ограничениям.

например, Ваш UserDTO может содержать:

@Size(max = 30)
private String firstName;
@Pattern(regexp = "....")
private String lastName;

Но ваш контроллер получил firstName с размером больше максимального / firstName с неверным шаблоном.

Читайте также: https://docs.oracle.com/javaee/7/api/javax/validation/ConstraintValidator.html#isValid-T-javax.validation.ConstraintValidatorContext-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...