后台管理: CRUD单表操作,参数校验,统一规范

前言:
        在对管理后台,一般都有对单表的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...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章