后端接口统一规范的同时,如何优雅得扩展规范.docxVIP

后端接口统一规范的同时,如何优雅得扩展规范.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
后端接口统一规范的同时,如何优雅得扩展规范 由于BindingResult对象里封装了很多信息,我们可以拿到校验错误的字段名,拿到了字段名后再响应对应的错误码和错误信息。在Controller层里对BindingResult进行了处理自然就不会被我们之前写的全局特别处理给捕获到,也就不会响应那统一的错误码了,从而达到了每个字段有本人的响应码和响应信息: @PostMapping(/addUser)public ResultVOString addUser(@RequestBody @Valid User user, BindingResult bindingResult) { for (ObjectError error : bindingResult.getAllErrors()) { // 拿到校验错误的参数字段 String field = bindingResult.getFieldError().getField(); // 推断是哪个字段发生了错误,然后前往数据响应体 switch (field) { case account: return new ResultVO(100001, 账号验证错误, error.getDefaultMessage()); case password: return new ResultVO(100002, 密码验证错误, error.getDefaultMessage()); case email: return new ResultVO(100003, 邮箱验证错误, error.getDefaultMessage()); } } // 没有错误则前往则直接前往正确的信息 return new ResultVO(userService.addUser(user)); } 我们有意输错参数,来看下效果: 嗯,是达到效果了。不过这代码一放出来几乎就让人头疼不已。繁琐、维护性差、复用性差,这才推断三个字段就这样子了,要那些特殊多字段的还不得起飞咯? 这种方式直接pass! 那我们不手动捕获特别,我们直接舍弃validation校验,手动校验呢? 手动校验 我们来试试: @PostMapping(/addUser)public ResultVOString addUser(@RequestBody User user) { // 参数校验 if (user.getAccount().length() 6 || user.getAccount().length() 11) { return new ResultVO(100001, 账号验证错误, 账号长度必需是6-11个字符); } if (user.getPassword().length() 6 || user.getPassword().length() 16) { return new ResultVO(100002, 密码验证错误, 密码长度必需是6-16个字符); } if (!Pattern.matches(^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$, user.getEmail())) { return new ResultVO(100003, 邮箱验证错误, 邮箱格式不正确); } // 没有错误则前往则直接前往正确的信息 return new ResultVO(userService.addUser(user)); } 我去,这还不如上面那种方式呢。上面那种方式至少还能享受validation校验规章的便利性,这种方式几乎又臭又长。 那有什么方法既享受validation的校验规章,又能做到为每个字段制定响应码呢?不卖关子了,当然是有滴嘛! 还记得我们前面所说的BindingResult可以拿到校验错误的字段名吗?既然可以拿到字段名,我们再进一步当然也可以拿到字段Field对象,能够拿到Field对象我们也能同时拿到字段的注解嘛。对,我们就是要用注解来优雅的实现上面的功能! 自定义注解 假如validation校验失败了,我们可以拿到字段对象并能够猎取字段的注解信息,那么只需我们为每个字段带上注解,注解中带上我们自定义的错误码code和错误信息msg,这样就能

您可能关注的文档

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档