一 场景
搭建SpringBoot项目时,当前端或者其他调用方,调用我们写的接口时,我们不能只依靠调用方,来控制参数的准确性,自己也要对参数进行校验。
二 使用方法
按照以往的做法,我们需要对request中的参数一个一个校验:
model:
public class OrderDto implements Serializable{
private String vendorCode;//商家编码,非空
private String orderNo;//订单编号,非空
private String userId;//收件人ID,非空
private String receiver;//收件人姓名
private String receivePhone;//收件人号码
}
然后再一个一个写判断
controller:
@PostMapping("/getOrder")
public String classs getOrder(@Requestbody VendorOrderDto vendorOrderDto )
{
if(vendorOrderDto.vendorCode==null||vendorOrderDto.vendorCode.equals("")){
return "请输入商家编码!";
}
if(vendorOrderDto.orderNo==null||vendorOrderDto.orderNo.equals("")){
return "请输入订单编号!";
}
...
return null;
}
这种做法是可取的,能达到我们的要求,但是如果model字段很多,controller层判定语句也会增加,代码冗余且维护起来麻烦。我们使用Spring注解,来实现我们的需求。
model:
public class OrderDto implements Serializable{
@NotBlank(message = "请输入商家编码!")
private String vendorCode;//商家编码,非空
@NotNull("请输入订单编号!")
private String orderNo;//订单编号,非空
@NotNull("请输入收件人ID!")
private String userId;//收件人ID,非空
private String receiver;//收件人姓名
private String receivePhone;//收件人号码
}
三 某个应用场景
注解@NotBlank等,还可配合网关进行权限管理。
比如,有运营端和商家端。他们在查看订单时调用的接口一样,均是getOrder(orderDto),但是他们返回的VO对象的内容不一样。运营端看到的信息要多,比如,userId。而商家端只能看到收件人姓名、电话等信息,看不到UserId。
运营端调用服务端2的getOrder()接口时,走的是服务端,服务端1调用服务端2,也就是服务端1调用服务端2的getOrder()接口,那么在服务端1时,就不需要配置商家编码@NotBlank这个条件,因为运营端可以查看所有商家的订单信息。
商家端只能查看自己的订单,所以服务端2需要商家编码才能返回商家自己的订单。商家端调用服务端2的getOrder()接口时,走的是网关,网关调用服务端2,那么在网关处就需配置@NotBlank这个条件,这样就能实现权限管理。
这是我再在学习时看到的一个使用场景,专业的权限管理方法,请查阅资料。