我正在尝试验证表单输入,但是在提交表单后,它不会加载我的控制器方法,而是显示一个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
终止调用,这是预期的吗?
答案 0 :(得分:1)
我经过一整天的调试后就发现了。在@Valid
之前的User user
导致ConstraintViolationException
,按预期,该参数将无效,因此将中止usersAdd
的调用。
造成这种现象的原因是控制器类上的@Validated
,我从一些教程中学到了这一点,但是删除该类后,一切正常,并按预期进行了验证。
我想我在检查REST教程并尝试使用他们的方法...不是最好的主意;)