Spring 2 + Thymeleaf +验证= Whitelabel错误,第500页

时间:2018-10-15 22:27:13

标签: validation spring-mvc groovy thymeleaf

我正在尝试验证表单输入,但是在提交表单后,它不会加载我的控制器方法,而是显示一个private func checkPushNotificationAllowed(completionHandler: @escaping (Bool) -> Void) { if #available(iOS 10.0, *) { UNUserNotificationCenter.current().getNotificationSettings { (settings) in if settings.authorizationStatus == .notDetermined || settings.authorizationStatus == .denied { completionHandler(false) } else { completionHandler(true) } } } else { if let settings = UIApplication.shared.currentUserNotificationSettings { if settings.types.isEmpty { completionHandler(false) } else { completionHandler(true) } } else { completionHandler(false) } } } ,其状态为Whitelabel Error Page,状态为Internal Server Error,但其状态为更正验证错误。 我知道这一定是与我的方法的预期参数匹配的问题,但是到目前为止,我所收集的规则只是500,然后是BindingResult,但我仍然做到了,但这仍然不会触发我的方法控制器方法...

任何想法都值得赞赏。

控制器方法,不幸的是未触发:

Model

模板形式:

@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>

更新:

进行调试并找到了这部分,因此似乎正在使用正确的参数进行调用。我是Spring的新手,所以我很难考虑其他“新手”问题。 在@Document(collection = "users") public class User { @Id String id @Size(min=3, max=100) String name } 中,用InvocableHandlerMethod.java在我的DoInvoke上调用了方法usersAdd。 调用该方法时,它会导致Station, BeanPropertyBindingResult, BindingAwareModelMap终止调用,这是预期的吗?

1 个答案:

答案 0 :(得分:1)

我经过一整天的调试后就发现了。在@Valid之前的User user导致ConstraintViolationException,按预期,该参数将无效,因此将中止usersAdd的调用。 造成这种现象的原因是控制器类上的@Validated,我从一些教程中学到了这一点,但是删除该类后,一切正常,并按预期进行了验证。 我想我在检查REST教程并尝试使用他们的方法...不是最好的主意;)