Java Spring启动验证不需要';行不通

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

我有Spring启动应用程序,无法向用户显示错误消息。没有该数据的对象不会保存在数据库中,这是正常的。但是显示错误消息是问题所在。调试时,我得到的错误大小为0

这是我的模型:

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