问题描述
采用JSR303规范的validation库进行后端验证,但是使用BindingResult对象后却获取不到错误信息
局部代码如下:
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
private Long brandId;
@NotEmpty
@NotBlank(message = "品牌名不能为空")
private String name;
}
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult result) {
if (result.hasErrors()) {
Map<String, String> map = new HashMap<>();
result.getFieldErrors().forEach((item)->{
String message = item.getDefaultMessage();
String field = item.getField();
map.put(field, message);
});
return R.error(400, "提交数据不合法").put("data", map);
} else {
brandService.save(brand);
return R.ok();
}
}
解决方案
仔细排除后发现实际代码并没有什么问题,debug后也发现result对象中的errors字段中并没有获取到错误对象,最后通过修改pom文件中的依赖解决了这种问题,在pom中应包含有如下两个依赖,缺一不可,我就是漏了hibernate-validator导致的错误
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.0.Alpha3</version>
</dependency>