SpringMVC List<T> @NotEmpty @NotNull 入参校验未生效

场景描述

controller.java

public CommonResponse<Boolean> save(@Valid @RequestBody List<CatalogDto> catalogDtos)

CatalogDto.java
SpringMVC List<T> @NotEmpty @NotNull 入参校验未生效_第1张图片

问题描述:

@NotEmpty和@NotBlank在请求进入的时候并没有生效,虽然我在controller的方法内加入了@Valid或@Validator注解。

问题分析

直接对List集合进行校验的行为和对自定的DTO校验的行为其实是有区别的,区别在于自定义的DTO是被作为一个整体对象校验(可以理解为一个入口),对象里的每一个字段都会被按照标记的注解进行校验。但是将List作为一个整体对象的时候,其内部是没有任何校验注解的,因为java源码中本身就没有添加校验相关的注解。这个时候@Valid和@NotEmpty都想把personList作为一个字段来校验,但是MVC不支持这种模式,所以未生效。

解决方案

封装,将接口需要校验的参数封装为一个DTO,然后再校验。
controller.java
在这里插入图片描述
vo.java
SpringMVC List<T> @NotEmpty @NotNull 入参校验未生效_第2张图片

你可能感兴趣的:(爬坑指南,Java注解,springmvc,NotNull未生效)