如何解决如何在Spring Boot中手动启用来自ModelAttribute和BindingResult的错误消息?
具有一个具有保存记录功能的控制器:
@PostMapping("/create")
public String create(
@Valid @ModelAttribute NewShoeViewModel newShoeViewModel,BindingResult bindingResult
)
{
...
}
问题是服务层是由另一个人开发的,并使用DTO对象创建新记录,并且该记录具有验证注释,例如,要知道鞋子的名称是否为空白,则问题是从我的视图模型开始的,我也进行了相同的验证,但是如果视图模型与DTO验证不匹配,则服务层会抛出验证异常。
要处理这些错误,如果服务告诉我名称的非法长度与我的视图模型的非法长度不同,则应处理该错误,现在,我将按照以下步骤进行操作:
@PostMapping("/create")
public String create(
@Valid @ModelAttribute NewShoeViewModel newShoeViewModel,BindingResult bindingResult,Locale locale,// ...
)
{
// ...
try
{
shoesService.create(shoeDTO);
}
catch (ConstraintViolationException exception)
{
// ...
if(/* name have a bad length from Service DTO */)
{
// Custom binding throw
bindingResult.rejectValue(
"name","error.name.length",messageSource.getMessage(
"messages.shoes.name.bad_length",null,locale
)
);
}
}
//...
}
问题是几个,首先,控制器不应该处理错误消息,viewmodel已经包含了自己的由BindingResult处理的消息:
public class NewShoeViewModel implements Serializable
{
@NotEmpy
@Size(min=3,max=128,message="{messages.shoes.name.bad_length}")
private String name;
我如何获得验证以说名称字段失败,但是没有从控制器发送文本并且调用大小错误而不是空错误?只需通过手动使验证失败,这种方式就可以将服务DTO错误传递给viewmodel错误。在官方文档中,rejectValue
需要使用默认的信息,但需要回收viewmodel消息,例如:
- Dto说:名称错误->在视图模型中设置:名称错误
- Dto说:描述错误->在视图模型中设置:描述错误
但保留原始信息和ViewModel验证代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。