JavaWeb项目参数合法性校验
目前Web项目校验参数合法性时,经常用到@Validated
、@Valid
等,下面总结下各种情况下的使用。
情景1
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TableColumnBO {
@NotBlank(message = "表名不能为空")
private String tableName;
@NotBlank(message = "字段名不能为空")
private String columnName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnPermissionSaveDTO {
@NotNull(message = "角色Id列表不能为空")
@Size(min = 1, message = "至少选择一个角色")
private List<Long> roleIds;
@NotNull(message = "表字段信息不能为空")
@Size(min = 1, message = "至少选择一个字段")
@Valid
private List<TableColumnBO> tableColumnBOS;
}
@PostMapping("XXX")
public Result<String> saveColumnPermission(@RequestBody @Validated ColumnPermissionSaveDTO columnPermissionSaveDTO) {
... ...
}
1、在controller
层接口参数加@Validated
,使ColumnPermissionSaveDTO
中配置的校验规则生效。例如上面的@NotNull
、@Size
2、ColumnPermissionSaveDTO
类的tableColumnBOS
属性是List<自定义类>
类型,需要在ColumnPermissionSaveDTO
类的tableColumnBOS
属性上增加@Valid
注解,使TableColumnBO
类中配置的校验规则生效。如果不加,则TableColumnBO
类中配置的校验不会生效。
情景2
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TableColumnBO {
@NotBlank(message = "表名不能为空")
private String tableName;
@NotBlank(message = "字段名不能为空")
private String columnName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnPermissionSaveDTO {
@NotNull(message = "角色Id列表不能为空")
@Size(min = 1, message = "至少选择一个角色")
private List<Long> roleIds;
@NotNull(message = "表字段信息不能为空")
@Valid
private TableColumnBO tableColumnBO;
}
@PostMapping("XXX")
public Result<String> saveColumnPermission(@RequestBody @Validated ColumnPermissionSaveDTO columnPermissionSaveDTO) {
... ...
}
1、在controller
层接口参数加@Validated
,使ColumnPermissionSaveDTO
中配置的校验规则生效。例如上面的@NotNull
、@Size
2、ColumnPermissionSaveDTO
类的tableColumnBO
属性是自定义类
类型,需要在ColumnPermissionSaveDTO
类的tableColumnBO
属性上增加@Valid
注解,使TableColumnBO
类中配置的校验规则生效。如果不加,则TableColumnBO
类中配置的校验不会生效。