dede网站地图地睛,个人业余做网站怎么弄,内部券网站怎么做,有个新网站专门做外贸的叫什么springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢#xff1f;例如通过excel导入数据#xff0c;将excel数据转为实体类集合后#xff0c;校验集合中属性是否符合要求。
2.代码实现
定义… springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢例如通过excel导入数据将excel数据转为实体类集合后校验集合中属性是否符合要求。
2.代码实现
定义对象以及参数校验
Data
public class IdentityDTO {/*** 标识值索引*/NotNull(message index不能为空)private Integer index;/*** 标识值类型*/NotBlank(message type不能为空)Size(max 32, message type长度不能超过{max}个字符)private String type;
}添加字段校验工具类 import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.List;
import java.util.Set;public class ValidationUtils {private static final Validator validator Validation.buildDefaultValidatorFactory().getValidator();/*** 校验对象或集合并返回第一个校验不通过的字段的错误信息。* 如果所有字段校验通过则返回 null。** param obj 需要校验的对象或集合* return 返回第一个校验不通过的字段的错误信息如果所有字段校验通过则返回 null。*/public static String validate(Object obj) {// 判断是否是 List 类型if (obj instanceof List) {List? list (List?) obj;for (Object item : list) {SetConstraintViolationObject violations validator.validate(item);if (!violations.isEmpty()) {// 返回第一个校验不通过的字段的错误信息return violations.iterator().next().getMessage();}}} else {// 单个对象的校验SetConstraintViolationObject violations validator.validate(obj);if (!violations.isEmpty()) {// 返回第一个校验不通过的字段的错误信息return violations.iterator().next().getMessage();}}// 如果所有字段校验通过返回 nullreturn null;}
}
业务层代码实现 Overridepublic R test(String data) {JSONObject jsonObject JSON.parseObject(data);String suffix jsonObject.getString(suffix);JSONArray jsonArray jsonObject.getJSONArray(list);ListIdentityDTO list JSON.parseArray(jsonArray.toJSONString(), IdentityDTO.class);//参数校验String validationResult ValidationUtils.validate(list);if (validationResult ! null){return R.fail(操作失败,validationResult);}return R.ok();}示例