java - 如何处理控制器内的异常并将错误消息返回到 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>
解决方案
推荐阅读
- r - 在 Oracle 服务器上使用具有 IP 地址且没有 DSN 的新 odbc 包
- php - 从数据透视表 Laravel 访问表的所有信息
- sass - 如何使用父选择器作为 Sass 的后缀
- windows - 从服务执行 msg
- tensorflow - 在 TensorFlow 对象检测 API 中检测纪元结束
- javascript - 检查值是否包含在 firebase
- php - 具有多个选项的laravel下拉ajax
- swift - 故事板未链接到 ViewController.swift Xcode 中的@IBAction/Outlet
- python-3.x - Python:无法从父文件夹中的包导入(“尝试相对导入超出顶级包”)
- scala - 编写 ML 管道时出错:无法使用空组编写架构:消息 spark_schema