当前位置: 首页 > 后端技术 > Java

SpringBoot接口——如何优雅的封装接口返回的内容?

时间:2023-04-02 10:05:32 Java

使用SpringBoot开发Restful接口时统一返回,方便前端开发打包,出现时给出响应码和信息。@pdaiSpringBoot接口-如何优雅的封装接口的返回内容?RESTfulAPI接口?为什么需要统一封装接口实现案例状态码封装返回内容封装接口并在返回更多内容RESTfulAPI接口时调用示例源码?什么是休息?RepresentationalStateTransfer,翻译过来就是“表示层的状态转换”。一句话可以概括:REST是所有Web应用都应该遵循的架构设计指导原则。面向资源是REST最明显的特征,针对同一个资源的一组不同的操作。资源是一个可以在服务器上命名的抽象概念。资源是围绕名词组织的,首先要关注的是名词。REST要求对资源的各种操作必须通过统一的接口进行。只能对每个资源执行一组有限的操作。什么是RESTfulAPI?符合REST设计标准的API,即RESTfulAPI。REST架构设计所遵循的标准和准则是HTTP协议的性能。也就是说,HTTP协议是属于REST架构的一种设计模式。比如无状态,请求-响应。Restful相关文档可以参考https://restfulapi.net/为什么要统一封装接口?现在大部分项目都是采用前后端分离的模式进行开发。统一返回方便前端开发打包,出现时给出响应码和信息。查询某个用户界面,如果不封装,返回结果如下{"userId":1,"userName":"赵一"}如果封装,返回正常结果如下:{"timestamp":11111111111,"status":200,"message":"success","data":{"userId":1,"userName":"赵毅"}}异常返回结果如下:{"timestamp":11111111111,"status":10001,"message":"Usernotexist","data":null}实现案例如何实现上面的封装?状态码封装这里以常见的状态码为例,包括两个属性:responseCode和description。如果还有其他业务状态码,也可以放在这个类中。/***@authorpdai*/@Getter@AllArgsConstructorpublicenumResponseStatus{SUCCESS("200","success"),FAIL("500","failed"),HTTP_STATUS_200("200","ok"),HTTP_STATUS_400("400","请求错误"),HTTP_STATUS_401("401","无认证"),HTTP_STATUS_403("403","无权限"),HTTP_STATUS_500("500","服务器错误");publicstaticfinalListHTTP_STATUS_ALL=Collections.unmodifiableList(Arrays.asList(HTTP_STATUS_200,HTTP_STATUS_400,HTTP_STATUS_401,HTTP_STATUS_403,HTTP_STATUS_500));/***响应码*/privatefinalStringfinresponseString.*/*description;}返回内容包包括公共接口返回时间、status状态、message消息、data数据。考虑到数据的序列化(比如在网络上传输),这里的数据有时会扩展Serializable。@Data@BuilderpublicclassResponseResult{/***响应时间戳。*/私有长时间戳;/***响应码,200->OK。*/私有字符串状态;/***响应消息。*/私有字符串消息;/***响应数据。*/私有T数据;/***响应成功结果包装器。**@param数据类类型*@return响应结果*/publicstaticResponseResultsuccess(){returnsuccess(null);}/***响应成功结果包装器。**@paramdata响应数据*@param数据类类型*@return响应结果*/publicstaticResponseResultsuccess(Tdata){returnResponseResult.builder().data(数据).message(ResponseStatus.SUCCESS.getDescription()).status(ResponseStatus.SUCCESS.getResponseCode()).timestamp(System.currentTimeMillis()).build();}/***响应错误结果包装器。**@parammessage错误信息*@param数据类的类型*@return响应结果*/publicstaticResponseResultfail(Stringmessage){returnfail(null,message);}/***响应错误结果包装器。**@paramdata响应数据*@parammessage错误信息*@param数据类类型*@return响应结果*/publicstaticResponseResultfail(Tdata,Stringmessage){returnResponseResult.builder().data(data).message(message).status(ResponseStatus.FAIL.getResponseCode()).timestamp(System.currentTimeMillis()).build();}}接口返回时调用接口返回时调用,以用户界面为例/***@authorpdai*/@RestController@RequestMapping("/user")publicclassUserController{@AutowiredprivateIUserServiceuserService;/***@paramuseruserparam*@returnuser*/@ApiOperation("添加/编辑用户")@PostMapping("add")publicResponseResultadd(Useruser){if(user.getId()==null||!userService.exists(user.getId())){user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());userService.save(用户);}else{user.setUpdateTime(LocalDateTime.now());userService.update(用户);}返回ResponseResult.success(userService.find(user.getId()));}/***@return用户列表*/@ApiOperation("查询用户一")@GetMapping("edit/{userId}")publicResponseResultedit(@PathVariable("userId")LonguserId){return回应资源ult.success(userService.find(userId));}}示例源码https://github.com/realpdai/t...更多内容告别碎片化学习,无套路一站式系统学习后端开发:Java全栈知识体系(https://pdai.tech)