瞧瞧人家用springboot写的后端api接口,那叫一个优雅

author author     2023-03-27     130

关键词:

参考技术A

假设实现一个注册用户的功能,在controller 层,他会先进行校验参数,如下:

以上代码有什么问题嘛? 其实没什么问题,就是校验有点辣眼睛 。正常的添加用户业务还没写,参数校验就一大堆啦。假设后来,又接了一个需求:编辑用户信息。实现编辑用户信息前,也是先校验信息,如下:

我们可以使用注解的方式,来进行参数校验,这样代码更加简洁,也方便统一管理。实际上, spring boot 有个 validation 的组件,我们可以拿来即用。引入这个包即可:

引入包后,参数校验就非常简洁啦,如下:

然后在 UserParam 参数对象中,加入 @Validated 注解哈,把错误信息接收到 BindingResult 对象,代码如下:

如果你在你们项目代码中,看到controller 层报文返回结果,有这样的:

也有这样的:

显然,如果接口返回结果不统一,前端处理就不方便,我们代码也不好维护。再比如有的人喜欢用 Result 处理结果, 有点人 喜欢用 Response 处理结果,可以想象一下,这些代码有多乱。

所以作为后端开发,我们项目的响应结果,需要 统一标准的返回格式 。一般一个标准的响应报文对象,都有哪些属性呢?

响应状态码一般用枚举表示哈:

因为返回的数据类型不是确定的,我们可以使用泛型,如下:

有了统一的响应体,我们就可以优化一下controller 层的代码啦:

日常开发中,我们一般都是自定义统一的异常类,如下:

在controller 层,很可能会有类似代码:

这块代码,没什么问题哈,但是如果 try...catch 太多,不是很优雅。

可以借助注解 @RestControllerAdvice ,让代码更优雅。 @RestControllerAdvice 是一个应用于 Controller 层的切面注解,它一般配合 @ExceptionHandler 注解一起使用,作为项目的全局异常处理。我们来看下demo代码哈。

还是原来的 UserController ,和一个会抛出异常的userService的方法,如下:

我们再定义一个全局异常处理器,用 @RestControllerAdvice 注解,如下:

我们有想要拦截的异常类型,比如想拦截 BizException 类型,就新增一个方法,使用 @ExceptionHandler 注解修饰,如下:

springboot--jwt的后端搭建前后分离

SpringBoot-零基础搭建前后端分离--后端搭建1.创建父项目verse点击​​CreateNewProject​​选择Maven,选择本地安装的JDK,点击Next输入GroupID:com.verse、ArtiactID:verse点击Finish创建完成后,删除​​src​​在​​pom.xml​​中添加依赖管理<... 查看详情

瞧瞧别人家的api接口,那叫一个优雅(代码片段)

前言在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、... 查看详情

瞧瞧别人家的api接口,那叫一个优雅(代码片段)

前言在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、... 查看详情

有没有人尝试使用 Google Spanner 作为 Gorm 的后端?

】有没有人尝试使用GoogleSpanner作为Gorm的后端?【英文标题】:HasanyonetriedusingGoogleSpannerasbackendforGorm?【发布时间】:2022-01-1412:46:24【问题描述】:我很好奇是否有人有使用GoogleSpanner作为数据库设置GolangORMGorm的经验?现有的sql驱... 查看详情

公司自用的国产api管理神器(代码片段)

1、前言虚竹哥从事后端开发,平时写的后端接口,是以swagger生成API接口文档,提供给前端调用,与前端交互的文档;然后用Postman自测接口,有些性能要求的接口会用JMeter进行接口性能测试。有时开发前端... 查看详情

公司自用的国产api管理神器(代码片段)

1、前言虚竹哥从事后端开发,平时写的后端接口,是以swagger生成API接口文档,提供给前端调用,与前端交互的文档;然后用Postman自测接口,有些性能要求的接口会用JMeter进行接口性能测试。有时开发前端... 查看详情

API.AI 没有连接到我的后端

】API.AI没有连接到我的后端【英文标题】:API.AIdoesnotconnecttomyback-end【发布时间】:2017-05-0812:45:59【问题描述】:我正在使用API.AI编写代理我观察到我的后端并非每次都被调用。我可以在我的访问日志中看到这一点。知道什么可... 查看详情

【springboot】2022-03-26【自定义请求转发、分发】

参考技术A当后端需要部署多区域或者多实例,而前端界面是一个,往往通过前端的区域筛选器来切换访问对应区域的后端实例时。可以通过前端直接访问不同区域的Ip,但这样新增区域或者后端变化时不够灵活;另外,也可以通... 查看详情

雪花作为高需求 API 的后端

】雪花作为高需求API的后端【英文标题】:SnowflakeasbackendforhighdemandAPI【发布时间】:2020-12-2201:44:58【问题描述】:在过去的八个月里,我和我的团队每天都在使用Snowflake来转换/丰富我们的数据(使用DBT)并使其在其他工具中可... 查看详情

小程序后端项目springboot框架部署到阿里云服务器支持https访问

前言:我的后端项目是Java写的,用的Springboot框架。在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功。不成功具体点说就是:域名地址可以正常访问(http/https均可),而部署... 查看详情

CORS 阻止了我的后端服务器,如何解决?使用 Springboot java 作为后端, react js 作为我的前端

】CORS阻止了我的后端服务器,如何解决?使用Springbootjava作为后端,reactjs作为我的前端【英文标题】:CORSblockingmybackendserver,howtofix?UsingSpringbootjavaasbackendandreactjsasmyfrontend【发布时间】:2020-02-0701:17:48【问题描述】:importReact,Compo... 查看详情

在 Axios 的后端使用 GitHub api 的问题

】在Axios的后端使用GitHubapi的问题【英文标题】:ProblemstouseGitHubapiinbackendwithAxios【发布时间】:2020-02-2019:22:44【问题描述】:我正在尝试在我的express应用程序中使用github的api,但它不起作用。当我将return与res.json(console.log(users))... 查看详情

为啥我的后端中的 axios 发布请求没有将任何数据发送回我的外部 api? -

】为啥我的后端中的axios发布请求没有将任何数据发送回我的外部api?-【英文标题】:Whyisntmyaxiospostrequestinmybackendsendinganydatabacktomyexternalapi?-为什么我的后端中的axios发布请求没有将任何数据发送回我的外部api?-【发布时间】:2... 查看详情

小程序后端项目springboot框架部署到阿里云服务器支持https访问(代码片段)

前言:  我的后端项目是Java写的,用的Springboot框架。在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功。  不成功具体点说就是:域名地址可以正常访问(http/https均可)... 查看详情

怎样用php开发微信小程序的后端?

可以去看小程序的开发文档,结合你公司的功能进行开发。追问具体看文档的哪部分?追答。。。你看符合你功能的那部分开发文档啊,,,你是开发?追问后台应该看哪部分?参考技术A用php写API接口给小程序使用追问能详细说一... 查看详情

借鉴一个比较标准的后端restfulapi

我们制定的API规范,使用了微服务架构所以做了一些改进,我们更偏向使用httpcode标识,不然需要自己处理成功或失败的逻辑,在200内再包一层显得啰嗦;并且微服务系列都不支持,Feign,监控等都需要自己改造。当逻辑错误时... 查看详情

容易被忽视的后端服务chunked性能问题

...易被忽视的后端服务chunked性能问题标签(空格分隔):springbootspringmvcchunked背景springboot创建的默认springmvc项目集成JAX-RS规范框架Jersey背景在之前的一次性能压测的时候我们发现一个细节问题,我们使用springboot创建的webrest项目,... 查看详情

如何使用Curl在没有前端的格子api的后端生成公共令牌?

】如何使用Curl在没有前端的格子api的后端生成公共令牌?【英文标题】:HowtouseCurltogenerateapublictokeninthebackendwiththeplaidapiwithoutthefrontend?【发布时间】:2021-10-2916:01:16【问题描述】:我希望能够使用plaidapi每天在我的服务器上下载... 查看详情