问题描述
采用JSR303规范的validation库进行后端验证,但是使用BindingResult对象后却获取不到错误信息
局部代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| @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; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @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导致的错误
1 2 3 4 5 6 7 8 9 10
| <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>
|