概述
代码案例
@ApiOperation(value = "测试表编辑/保存")
@PostMapping
public ResultVo<Boolean> saveOrUpdate(@Valid @RequestBody TemplateTableDTO templateTable) {
return new ResultVo<>(templateTableAppService.saveOrUpdate(templateTable));
}
/**
* <p>
* 测试表-20221101
* </p>
*
* @author smallNorth_Lee
* @date 2022/11/01
*/
@Data
@ApiModel(value = "DevelopTemplateTable对象", description = "测试表-20221101")
public class TemplateTableDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Long id;
@NotBlank(message = "命名空间不能为空")
@Size(min = 1, max = 20, message = "命名空间不能超过20个字符")
@ApiModelProperty(value = "命名空间")
private String namespace;
@NotBlank(message = "服务名称不能为空")
@ApiModelProperty(value = "服务名称")
private String serviceName;
}
注解参考:
@NotEmpty:作用在String、collection、map、数组上,不能为null,size > 0
@NotBlank: 只能用于String,不能为null,也不可以是" ",即trim()后长度大于0
@NotNull:作用于任何类型,不能为null,可以为空
@AssertTrue:必须为true
@AssertFalse:必须为false
@Min(value):必须为一个数字,且值大于等于指定的值
@Max(value):必须为一个数字,且值小于等于指定的值
@Size(max,min):限制参数大小范围
@Future:必须是一个将来的日期
@Past:必须是一个过去的日期
@Pattern(value):指定正则
统一异常拦截处理
这里两种异常,是因为@Valid和@Validated的注解抛出的异常不一样的,按需添加
/**
* 校验字段异常拦截
*
* @author smallNorth_Lee
* @date 2022/11/18
*/
@RestControllerAdvice(annotations = {RestController.class})
@Slf4j
public class ValidatedExceptionHandler {
/**
*
*使用@Valid异常
**/
@ExceptionHandler(BindException.class)
public ResultVo handleBindException(BindException ex) {
FieldError fieldError = ex.getBindingResult().getFieldError();
return new ResultVo<>(fieldError.getDefaultMessage());
}
/**
*
*使用@Validated异常
**/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultVo handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
FieldError fieldError = ex.getBindingResult().getFieldError();
return new ResultVo<>(fieldError.getDefaultMessage());
}
}
hold on !!! 如果参数为List,这种方式就失效了,解决办法如下
/**
* List<T>集合校验
*
* @author smallNorth_Lee
* @date 2022/11/18
*/
public class ValidList<E> implements List<E> {
@Valid
private List<E> list = new ArrayList<>();
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
@Override
public int size() {
return list.size();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public boolean contains(Object o) {
return list.contains(o);
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public Object[] toArray() {
return list.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return list.toArray(a);
}
@Override
public boolean add(E e) {
return list.add(e);
}
@Override
public boolean remove(Object o) {
return list.remove(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return list.contains(c);
}
@Override
public boolean addAll(Collection<? extends E> c) {
return list.addAll(c);
}
@Override
public boolean addAll(int index, Collection<? extends E> c) {
return list.addAll(index, c);
}
@Override
public boolean removeAll(Collection<?> c) {
return list.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return list.retainAll(c);
}
@Override
public void clear() {
list.clear();
}
@Override
public E get(int index) {
return list.get(index);
}
@Override
public E set(int index, E element) {
return list.set(index, element);
}
@Override
public void add(int index, E element) {
list.add(index, element);
}
@Override
public E remove(int index) {
return list.remove(index);
}
@Override
public int indexOf(Object o) {
return list.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return list.lastIndexOf(o);
}
@Override
public ListIterator<E> listIterator() {
return list.listIterator();
}
@Override
public ListIterator<E> listIterator(int index) {
return list.listIterator(index);
}
@Override
public List<E> subList(int fromIndex, int toIndex) {
return list.subList(fromIndex, toIndex);
}
代码案例如下(参数为List时)
@ApiOperation(value = "测试表编辑/保存,参数为List<T>校验")
@PostMapping("/insertBatch")
public ResultVo<Boolean> saveOrUpdateList(@Valid @RequestBody ValidList<TemplateTableDTO> templateTables) {
return new ResultVo<>();
}
最后
以上就是贪玩星月为你收集整理的SpringBoot @Valid请求参数校验的全部内容,希望文章能够帮你解决SpringBoot @Valid请求参数校验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复