前言:
在对管理后台,一般都有对单表的CRUD操作,这些操作,为了业务安全,都牵扯到一个参数校验的问题,所以需要统一一下规范,好处在于,减少代码的臃肿,让代码更清晰,讲重点只需要关注业务即可,也减少后续维护成本….
使用技术点:
javax.validation或者org.springframework.util.Assert
CRUD使用javax.validation示例:
1.定义AddParam UpdateParam 两个注解,用于后续的参数校验
import javax.validation.groups.Default;
public interface AddParam extends Default {
}
import javax.validation.groups.Default;
public interface UpdateParam extends Default {
}
2.在对入参中实体类(DTO)中的属性,加上一些参数校验注解和上面两个自定义注解
@Data
@ApiModel
public class EmergencyPersonnelDTO {
@ApiModelProperty("id,新增不必传递,修改必须传递")
@Null(message = "id必须为null或空",groups = {AddParam.class})
@NotNull(message = "id不能为空",groups = {UpdateParam.class})
private Integer id;
@ApiModelProperty("手机号")
@NotBlank(message = "手机号不能为空")
private String tel;
@ApiModelProperty("姓名")
@NotBlank(message = "姓名不能为空")
private String nick;
@ApiModelProperty("备注")
private String description;
@ApiModelProperty("岗位")
@NotBlank(message = "岗位不能为空")
private String jobs;
@ApiModelProperty("乡镇街道 id")
@NotNull(message = "乡镇街道 id不能为空")
private Integer aid;
}
Controller:
@Slf4j
@Api(tags = "XXX管理")
@RestController
@RequestMapping(value = "/test")
public class UEmergencyController {
@Resource
private IEmergencyService emergencyService;
@PostMapping(value = "list")
@ApiOperation(httpMethod = "POST", value = "列表", response = EmergencyEventEntity.class)
public ApiResult emergencyList(@ApiParam @RequestBody PageCondition<QueryDTO> pageCondition) {
if (pageCondition == null) {
pageCondition = new PageCondition<>();
}
return ApiResult.success(emergencyService.emergencyList(pageCondition));
}
@GetMapping(value = "view")
@ApiOperation(httpMethod = "GET", value = "查看", response = EmergencyEventEntity.class)
public ApiResult viewEmergency(@ApiParam @RequestParam(value = "id",required = false) Integer id) {
Assert.notNull(id, "id is not passed");
return ApiResult.success(emergencyService.viewEmergency(id));
}
@PostMapping(value = "add")
@ApiOperation(httpMethod = "POST", value = "添加", response = Boolean.class)
public ApiResult addEmergency(@ApiParam @RequestBody @Validated({AddParam.class}) EmergencyEventDTO dto) {
return ApiResult.success(emergencyService.addEmergency(dto));
}
@PostMapping(value = "update")
@ApiOperation(httpMethod = "POST", value = "修改", response = Boolean.class)
public ApiResult updateEmergency(@ApiParam @RequestBody @Validated({UpdateParam.class}) EmergencyEventDTO dto) {
return ApiResult.success(emergencyService.updateEmergency(dto));
}
@GetMapping(value = "del")
@ApiOperation(httpMethod = "GET", value = "删除", response = Boolean.class)
public ApiResult delEmergency(@ApiParam @RequestParam(value = "id",required = false) Integer id) {
Assert.notNull(id, "id is not passed");
return ApiResult.success(emergencyService.delEmergency(id));
}
}
从以上代码看,可以看到代码很简洁,参数校验在controller层就已经完成,后续的业务层,只需要关注业务即可
PS:
1.注意AddParam和UpdateParam注解继承了Default,在 validation的group特性中,如果不继承,则不校验默认分组(Default),
2.在属性字段上不声明分组,都是使用Default分组,
所以,根据需求,自定义注解来看要不要继承Default...