首页 > 解决方案 > 如何处理控制器内的异常并将错误消息返回到 Spring Boot 和 Thymeleaf 中的视图

问题描述

所以我在一个项目中使用 Spring boot 和 thymeleaf。使用下面的控制器,我正在验证并保存从我的视图接收到的表单和文件。对于字符串大小和文件大小等简单验证,我使用代码中表示的 Validator 接口

journalValidator.validate(logForm, bindingResult);

pictureValidator.validate(multipartFile, bindingResult);

问题是我的表单中的一个字段是 double 类型,当插入像 String 这样的错误类型时,控制器在接收表单时抛出异常,当多部分文件太大时也是如此。我是异常的新手,我不确定如何在类中处理它们,然后将错误消息返回到我的视图并将其显示在产生异常的字段下方。

@PostMapping("/makeLog")
public String makeLog(@ModelAttribute("logForm") FishJournal logForm,  
    @RequestParam("image") MultipartFile multipartFile, BindingResult bindingResult)throws 
IOException { {
        
         journalValidator.validate(logForm, bindingResult);
         if(!multipartFile.isEmpty()) {
             pictureValidator.validate(multipartFile, bindingResult);
         }
         
            if (bindingResult.hasErrors()) {
                  model.addAttribute("waters", waterService.findAll());
                  model.addAttribute("baits", baitService.findAll());
                  return "makeLog";
            }   
            
            
        
            Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
               String username;
              
               
               if (principal instanceof UserDetails) {
                    username = ((UserDetails)principal).getUsername();
                   } else {
                    username = principal.toString();
                   }
               User currentUser=userService.findByUsername(username);



 logForm.setPath(pictureService.getFishPicUploadPath(multipartFile));



 logForm.setDate(new Date());
 logForm.setUsers(currentUser);
 journalService.save(logForm);


return "redirect:/";

}

这些是我要处理异常的表单字段

 <div class="form-group">
                <label class="form-control-label" for="sizeBox" >Въведете максималната ширина на предложения вид риба в сантиметри.</label>
                <input class="form-control"  type="text" th:field="*{maxSize}"  maxlength="5"  id="sizeBox"/>
                <span class="has-error" th:if="${#fields.hasErrors('maxSize')}" th:errors="*{maxSize}"></span>
           </div>
        
         <div class="form-group">
                <label class="form-control-label" for="weightBox" >Въведете максималното тегло на предложения вид риба в килограми.</label>
                <input class="form-control"  type="text" th:field="*{maxWeight}"   maxlength="5" id="weightBox"/>
                <span class="has-error" th:if="${#fields.hasErrors('maxWeight')}" th:errors="*{maxWeight}"></span>
           </div>
<label>Photos: </label>
<input type="file" name="image" accept="image/png, image/jpeg"  class="form-control"/>
  <span class="has-error" th:if="${#fields.hasErrors('global')}" th:errors="*{global}"></span>
</div>

标签: javaspring-bootthymeleaf

解决方案


推荐阅读