Service层中使用Hibernate Validator的方法
因为项目的封装基础服务需要对参数校验 一个一个的判空打过与麻烦了 所以就写了一个通用的Service层中使用的Hibernate Validator的方法
通用方法:
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.List;
import java.util.Set;
/**
* @description: <br/>
* 通用Server validation方法
* <p>
* <br/>
* @author: Qz1997
* @create 2021/2/9 14:41
*/
@SuppressWarnings("unused")
@Component
public final class ValidatorsUtils {
@Resource
private Validator validator;
/**
* 验证实体
*
* @param obj 实体
* @param <T> 实体类类型
* @return 结果
*/
public <T> String valid(T obj) {
return this.valid(obj, new Class<?>[]{});
}
/**
* 验证实体
*
* @param obj 实体
* @param group 实体组
* @param <T> 实体类类型
* @return 结果
*/
public <T> String valid(T obj, Class<?>... group) {
Set<ConstraintViolation<T>> violations;
if (ArrayUtils.isEmpty(group)) {
violations = validator.validate(obj);
} else {
violations = validator.validate(obj, group);
}
if (CollectionUtils.isNotEmpty(violations)) {
for (ConstraintViolation<T> constraintViolation : violations) {
return constraintViolation.getMessage();
}
}
return null;
}
/**
* 校验list
*
* @param objList list
* @param <T> 实体类类型
* @return 结果
*/
public <T> String validList(List<T> objList) {
return this.validList(objList, new Class<?>[]{});
}
/**
* 校验list
*
* @param objList list
* @param group 组
* @param <T> 实体类类型
* @return 结果
*/
public <T> String validList(List<T> objList, Class<?>... group) {
if (CollectionUtils.isEmpty(objList)) {
return "对象空";
}
String result;
for (T t : objList) {
if (ArrayUtils.isEmpty(group)) {
result = this.valid(t);
} else {
result = this.valid(t, group);
}
if (!StringUtils.isBlank(result)) {
return result;
}
}
return null;
}
}
实体:
@Data
public class ShowDto extends Show {
private static final long serialVersionUID = 6389315097268352323L;
/**
* 页码
*/
@Min(value = 1, message = "页码不能小于一", groups = {Query.class})
@NotNull(message = "页码不能为空", groups = {Query.class})
private Integer pageNum;
/**
* 每页条数
*/
@Min(value = 1, message = "每页条数不能小于一", groups = {Query.class})
@NotNull(message = "每页条数不能为空", groups = {Query.class})
private Integer pageSize;
/**
* 开始时间
*/
@NotBlank(message = "开始时间不能为空", groups = {Query.class})
private String startTime;
/**
* 结束时间
*/
@NotBlank(message = "开始时间不能为空", groups = {Query.class})
private String endTime;
/**
* 查询条件限制
*/
public interface Query {}
}
使用:
@Override
public Result test(ShowDto showDto) {
String validResult = validators.valid(showDto, ShowDto.Query.class);
if (StringUtils.isNotBlank(validResult)) {
return new Result (ErrorCodeEnum.NO, validResult);
}
return new Result (ErrorCodeEnum.OK);
}