【问题标题】:Spring 2 + Thymeleaf + Validation = Whitelabel Error Page 500Spring 2 + Thymeleaf + 验证 = Whitelabel 错误页面 500
【发布时间】:2019-03-20 09:37:52
【问题描述】:

我正在尝试验证我的表单输入,但在提交后它不会加载我的控制器方法,而是显示带有Internal Server Error 和状态500Whitelabel Error Page,但具有正确的验证错误。 我知道这一定是与我的方法的预期参数匹配的问题,但到目前为止,我收集到的规则只是BindingResult 然后Model 我做到了,但它仍然没有触发我的控制器方法.. .

感谢任何想法。

Controller-Method,不幸的是没有触发:

@Controller
@Validated
public class UserController {
    @PostMapping("/users/add")
    def String usersAdd(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "userAdd"
    } else {
        userRepository.save(user)
        return "usersList"
    }
}

模板形式:

<form action="#" th:action="@{/users/add}" th:object="${user}" method="post">
    <div class="form-row">
        <div class="form-group col-md-12">
            <input type="text" class="form-control" th:field="*{name}">
            <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</div>
        </div>
    </div>
    <div class="form-row">
        <div class="form-group col-md-6">
            <button type="submit" class="btn btn-success">Add</button>
        </div>
    </div>
</form>

模型类:

@Document(collection = "users")
public class User {
    @Id
    String id
    @Size(min=3, max=100)
    String name
}

更新:

进行调试并找到这部分,所以它似乎使用正确的参数调用。我是 Spring 新手,所以我很难思考其他“新手”问题。 在InvocableHandlerMethod.java 中,方法DoInvoke 在我的usersAdd 上调用Station, BeanPropertyBindingResult, BindingAwareModelMap。 调用该方法时,它会导致ConstraintViolationException 将中止调用,这是预期的吗?

【问题讨论】:

  • 您是否尝试在隐藏输入中添加 id?
  • 我添加了&lt;input th:type="hidden" th:field="*{id}" /&gt; 无济于事。
  • 与我的 java 代码完美配合。不过我没有尝试过 groovy。
  • 你还在User user参数前面使用了@Valid?因为如果我删除它,该方法实际上会被执行,因为现在没有ConstraintViolationException 被抛出。但出乎意料的是bindingResult.hasErrors() 是假的,并且由于该字段是空的,它实际上应该是真的……猜不在那里。

标签: validation spring-mvc groovy thymeleaf


【解决方案1】:

经过长时间的调试会话后,我想通了。我的User user 之前的@Valid 会导致ConstraintViolationException,这将按预期中止我的usersAdd 的调用,因为正如预期的那样,该参数无效。 这种行为的原因是控制器类中的@Validated,这是我从一些教程中获得的,但是当删除时,一切正常并按预期进行验证。 我想我正在检查 REST-Tutorial 并尝试使用他们的方法......不是最好的主意;)

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2021-08-23
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多