Java Spring启动验证不需要';行不通
我有Spring启动应用程序,无法向用户显示错误消息。没有该数据的对象不会保存在数据库中,这是正常的。但是显示错误消息是问题所在。调试时,我得到的错误大小为0 这是我的模型:Java Spring启动验证不需要';行不通,java,validation,spring-boot,thymeleaf,Java,Validation,Spring Boot,Thymeleaf,我有Spring启动应用程序,无法向用户显示错误消息。没有该数据的对象不会保存在数据库中,这是正常的。但是显示错误消息是问题所在。调试时,我得到的错误大小为0 这是我的模型: @Size(min = 1, message = "Address is invalid.") @NotNull @Column private String address; 控制器 @RequestMapping(value = "/create", method = RequestMethod.POST
@Size(min = 1, message = "Address is invalid.")
@NotNull
@Column
private String address;
控制器
@RequestMapping(value = "/create", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createNewBusiness(@Valid @ModelAttribute("business")
Business business, BindingResult result, Model model) {
model.addAttribute("userEmail", getUserEmail());
logger.info("/business/create:" + business.toString());
LocationResponse locationResponse = geoService.getCoords(business.getAddress());
if(locationResponse.getStatus().equals("OK")) {
business.setLatitude(locationResponse.getResults().get(0).getGeometry().getLocation().getLat());
business.setLongitude(locationResponse.getResults().get(0).getGeometry().getLocation().getLng());
business.setUserId(getUserId());
businessService.createNew(business);
model.addAttribute("business", business);
}else{
business.setAddress(null);
model.addAttribute("business", business);
}
if(result.hasErrors()){
List<FieldError> errors = result.getFieldErrors();
for (FieldError error : errors ) {
System.out.println (error.getObjectName() + " - " + error.getDefaultMessage());
}
return "newBusiness";
}
return "business";
@RequestMapping(value=“/create”,method=RequestMethod.POST,
consumes=MediaType.APPLICATION\u FORM\u URLENCODED\u VALUE)
公共字符串createNewBusiness(@Valid@ModelAttribute(“业务”)
业务、BindingResult结果、模型){
addAttribute(“userEmail”,getUserEmail());
logger.info(“/business/create:+business.toString());
LocationResponse LocationResponse=geoService.getCoords(business.getAddress());
if(locationResponse.getStatus().equals(“OK”)){
setLatitude(locationResponse.getResults().get(0.getGeometry().getLocation().getLat());
setLength(locationResponse.getResults().get(0.getGeometry().getLocation().getLng());
setUserId(getUserId());
businessService.createNew(业务);
model.addAttribute(“业务”,业务);
}否则{
business.setAddress(空);
model.addAttribute(“业务”,业务);
}
if(result.hasErrors()){
List errors=result.getFieldErrors();
for(FieldError错误:错误){
System.out.println(error.getObjectName()+“-”+error.getDefaultMessage());
}
回归“新业务”;
}
返回“业务”;
}
还有百里香
<div class="input-field left m-0 w-100">
<i class="fa fa-map-marker prefix grey-text" aria-hidden="true"></i>
<input placeholder="Address" id="inputAddress" name="address" type="text" class="validate my-0" th:required="true">
<label th:errors="*{address}" th:if="${#fields.hasErrors('address')}" >Invalid address </label>
</div>
无效地址
您需要使用@Valid
和一些@ModelAttribute
作为createNewBusiness()
的参数,具体取决于您的参数和内容
您还需要将th:field=“*{address}”
添加到您的inputfield,因为它是框架中此inputfield的ID
因此,在您的情况下,方法头将如下所示:
public String createNewBusiness(@ModelAttribute Business business,
@Valid Model model, BindingResult result) {
// ...
}
如果要抛出自定义验证错误(例如,如果您正在通过模型中的注释验证器以外的其他方法验证字段),可以通过
BindingResult#rejectValue()
方法来执行。
例如:
if (business.getEmail() == null || business.getEmail().length() == 0) {
result.rejectValue("email", "email.missing", "Must enter email");
}
显然,email字段只是一个示例,因为您需要在您的thymeleaf资源上使用该email字段以及error字段
有关此主题的更多信息,请访问
我的解决方案对您有用吗?请(稍后)让我知道。我编辑了控制器,但错误消息仍然没有显示您正在验证
业务
,但您希望地址
有效并在UI上输入它。此字段是否属于业务
-实体的一部分?是的,字段地址是业务的一部分。请尝试使用UI上的字段ID显示消息。因此,您可以在.hasErrors()
上使用输入地址
而不是地址
。我最不希望看到的是你需要使用field-id。。。