控制器规范
@RestController
@RequestMapping(value = "/user")
@Api(value = "UserController", tags = "员工控制api")
public class UserController extends BaseController{
@Autowired
UserService userService;
@ApiOperation(value = "获取员工信息", notes = "获取员工信息")
@RequestMapping(value = "get_user_info", method = RequestMethod.GET)
public AjaxResult<UserInfoResponseVmo> getUserInfo(
@RequestParam(name = "userId", value = "员工ID", required = true, hidden = false)
@NotNull @Min(value = 1) @Max(value = 200) Integer userId,
@RequestParam(name = "userIds", value = "员工ID列表", required = true, hidden = false)
@NotEmpty @Size(max = 200, min = 1) List<Integer> userIds,
@RequestParam(name = "amout", value = "金额", required = false, hidden = true)
@DecimalMax(value="9999999999999999999",message="值应小于9999999999999999999")
@DecimalMin(value="0",message="值应大于0") BigDecimal amout,
@RequestParam(name = "mobile", value = "手机号", required = true, hidden = false)
@Pattern(regexp = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$")
@NotBlank @Length(min = 11, max = 11) String mobile) throws Exception{
AjaxResult<UserInfoResponseVmo> ajaxResult = new AjaxResult<>();
UserInfoResponseVmo result = userService.getUserInfo(userId,userIds,amout,mobile);
ajaxResult.setData(result);
return ajaxResult;
}
@ApiOperation(value = "获取员工信息", notes = "获取员工信息")
@RequestMapping(value = "get_user_info", method = RequestMethod.POST)
public AjaxResult<UserInfoResponseVmo> getUserInfo(@RequestBody @Valid UserInfoRequestVmo request) throws Exception{
AjaxResult<UserInfoResponseVmo> ajaxResult = new AjaxResult<>();
UserInfoResponseVmo result = userService.getUserInfo(request);
ajaxResult.setData(result);
return ajaxResult;
}
}
控制器规范
规范
* 1 所有controller都要继承 BaseController
* 2 所有controller都要添加注解 @RestController、@RequestMapping
* 3 @RequestMapping的使用,注解地址value,多个单词时以"/"分割, 例:@RequestMapping(value = "/member/level")
* 4 提供给front(c端接口入口)、mp(商户PC/商户小程序/POS机等商户系统入口)、op(运营后台或内部系统入口)、third(三方接口)、task(job入口)的接口,要单独包下,且控制器路径加上前缀/front、/mp、/op、/open、/task前缀,例:@RequestMapping(value = "/mp/user")
* 5 效能平台接口和op接口相同,都以/op前缀开头
* 6 controller层职责:参数获取,参数校验,参数解析。禁止写任何业务逻辑
建议
* 1 控制器注解 @Api,用于swagger接口文档描述
* 1.1 value属性:控制器地址,
* 1.1 tags属性:控制器描述(中文描述分享连接乱码,建议框架升级3.0.0)
* 2 数据库默认值为0的字段,查询接口需验证数据库查询字段大于0,避免因参数传0,造成大量无效数据查出,带来的内存溢出
接口规范
规范
* 1 接口返回结构 AjaxResult<T>,明确定义返回类T的结构,禁止AjaxResult<>,AjaxResult<Object>等不明确返回值写法
* 2 接口必须明确指定接口请求方式, 注解:@RequestMapping、@GetMapping、@PostMapping
* 3 接口地址命名方式,单词下划线隔开,例:@GetMapping("/get_user_info_by_id")
* 4 接口的方法命名方式,接口地址下划线转驼峰,例:getUserInfoById
* 5 接口入参校验相关注解的应用,详见下边接口注解介绍
建议
* 1 swagger接口描述注解:@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”,
response = “接口返回参数类型”, notes = “接口发布说明”)
接口入参校验
* 1 get请求参数:@ApiParam,post请求体:@RequestBody
* 2 验证引用数据类型里具体某个属性:@Valid,和post请求体注解联合使用,@Valid常用校验注解的解释说明
* 2.1 @NotNull:校验入参不能为空,无法正确校检长度为0的字符串或以完全为空格的字符串
* 2.2 @DecimalMax(value):限制必须为一个不大于指定值的数字,小数存在精度
* 2.3 @DecimalMin(value):限制必须为一个不小于指定值的数字,小数存在精度
* 2.4 @Max(value):限制必须为一个不大于指定值的数字
* 2.5 @Min(value):限制必须为一个不小于指定值的数字
* 2.6 @Pattern(regexp = ""):使用正则表达式验证String,接受字符序列,regexp必填,所修饰为null时认为是通过验证
* 2.7 @Size(max,min):限制字符长度必须在min到max之间
* 2.8 @Length(min=, max=):长度是否在范围内
* 2.9 @NotEmpty:验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
* 2.10 @NotBlank:验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格