问题描述
@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消息,例如:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)