spring的controller层参数合法性校验,多层实体类情况

23 篇文章 0 订阅

一、对于只有一层的实体类,直接使用@Validated注解就行

另外需要注意:如果是在方法中直接验证参数,那在类上面加@Validated就行如下:

@Validated
public class DutyPeriodController {

    @Autowired
    private DutyPeriodService dutyPeriodService;


    @DeleteMapping(value = "/delete")
    public ResultMessage delete(@NotNull(message = "班次id不能为空") Integer dutyPeriodId) {
        dutyPeriodService.delete(dutyPeriodId);
        return ResultMessage.newSuccessfulMessage(DefaultMessages.DELETE_SUCCESS);
    }
}

如果是在方法验证实体类,必须在实体类前面加上@Validated,如下

public class ChargingConfController {
    @PostMapping("/add")
    public ResultMessage add(@Validated ChargingConfDTO chargingConf) {
        chargingConfService.add(chargingConf);
        return ResultMessage.newSuccessfulMessage(DefaultMessages.SAVE_SUCCESS);
    }

二、对于多层,就要了解一下@Validated和@Valid区别了,@Valid可用于bean中有bean,多层判断,实例如下:

①controller层

public class DutyPeriodController {
    @PostMapping(value = "/save")
    public ResultMessage save(@Valid @RequestBody DutyPeriodDTO dutyPeriodDTO) {
        dutyPeriodService.save(dutyPeriodDTO);
        return ResultMessage.newSuccessfulMessage(DefaultMessages.SAVE_SUCCESS);
    }
}

②实体类层

public class DutyPeriodDTO {
    @Valid
    private List<DutyWeekPeriodDTO> dutyWeekPeriods;
}
public class DutyWeekPeriodDTO {
    private Integer periodId;
    @NotNull(message = "星期信息不能为空")
    @Min(value = 1, message = "星期信息必须大于1")
    @Max(value = 7, message = "星期信息不能大于7")
    private Integer week;
    @NotEmpty(message = "开始时间不能为空")
    @Pattern(regexp = "([01][0-9]|2[0-4]):(0[0-9]|[1-6][0-9])", message = "开始时间格式必须为HH:mm")
    private String startTime;
    @NotEmpty(message = "结束时间不能为空")
    @Pattern(regexp = "([01][0-9]|2[0-4]):(0[0-9]|[1-6][0-9])", message = "结束时间格式必须为HH:mm")
    private String endTime;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值