我有这个方法
@PostMapping
public String saveOrder(@Valid @ModelAttribute OrderCreationDto order,
BindingResult bindingResult,
@AuthenticationPrincipal AuthenticatedUser authenticatedUser,
Model model) {
System.out.println("BINDING " + bindingResult);
if (bindingResult.hasErrors()) {
fillMenuModelWithData(model);
return "menu";
}
try {
orderService.saveOrder(order, authenticatedUser);
} catch (InsufficientFundsException e) {
log.debug(e.toString());
fillMenuModelWithData(model);
return "menu";
}
return "redirect:/orders/history";
}
这个辅助方法只是为了用所需的属性填充模型
private void fillMenuModelWithData(Model model) {
model.addAttribute("sortField", DEFAULT_SORT_FIELD);
model.addAttribute("sortDir", DEFAULT_SORT_DIR);
model.addAttribute("filterCategory", DEFAULT_CATEGRY);
model.addAttribute("pageSize", DEFAULT_PAGE_SIZE);
model.addAttribute("filterCategory", DEFAULT_CATEGRY);
model.addAttribute("order", new OrderCreationDto());
model.addAttribute("dishList", dishService.findAllDishesSorted(
DEFAULT_SORT_FIELD, DEFAULT_SORT_DIR));
}
如您所见,我使用
System.out.println
我的 BindingResult 打印到控制台,它看起来像这样。
绑定org.springframework.validation.BeanPropertyBindingResult:2 错误
字段“address”上对象“orderCreationDto”中的字段错误: 拒绝值 [ ];代码 [NotBlank.orderCreationDto.address,NotBlank.address,NotBlank.java.lang.String,NotBlank]; 论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [orderCreationDto.address,address];参数[];默认 消息[地址]];默认信息【地址不能为空】
字段“dishIdQuantityMap”上的对象“orderCreationDto”中出现字段错误: 拒绝值 [{752=0, 952=0}];代码 [HasOrder.orderCreationDto.dishIdQuantityMap,HasOrder.dishIdQuantityMap,HasOrder.java.util.Map,HasOrder]; 论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [orderCreationDto.dishIdQuantityMap,dishIdQuantityMap]; 参数[];默认消息[dishIdQuantityMap]];默认消息 [订单不含任何菜品]
看起来一切正常,让我们看看
menu
页面是否有任何错误。
<p th:text="${#fields.errors()}"></p>
<p th:text="${#fields.hasAnyErrors()}"></p>
我们什么也没看到
我自己尝试调试了整个晚上,非常需要你的帮助!
更新:
这是我在 Post 方法中跳过添加新订单时遇到的错误
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'order' available as request attribute