ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

业务代码优化杂谈

2021-08-27 16:04:28  阅读:202  来源: 互联网

标签:return userSettleQueryDTO ResultVO 杂谈 业务 代码优化 result new page


       最近在审查组员代码的时候发现了几个问题,这里整理出来分享给大家,希望大家看了后有不同意见欢迎拍砖。

      一、背景:分页接口中大量的模板代码。代码如下:

PageVO<UserSettle> result = new PageVO<>();
Page page = PageHelper.startPage(userSettleQueryDTO.getPage(), userSettleQueryDTO.getSize());
List<UserSettle> userSettles = userSettleMapper.queryAllByPage(userSettleQueryDTO);
PageInfo pageInfo = new PageInfo<>(page.getResult());
result.setPage(pageInfo.getPageNum());
result.setSize(pageInfo.getPageSize());
result.setTotal(pageInfo.getTotal());
result.setDataList(userSettles);
return result;
对于这种代码,直接告诉我这样写不合理。想到我在整理框架的时候,使用了统一的结果返回,所以这块提了一个建议。这里先直接上修改之后的代码
Page page = PageHelper.startPage(userSettleQueryDTO.getPage(), userSettleQueryDTO.getSize())
        .doSelectPage(() -> userSettleMapper.queryAllByPage(userSettleQueryDTO));
return page;
修改之后是不是就很简单了,那全局返回结果怎么处理的呢
 1 @RestControllerAdvice
 2 public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> {
 3 
 4 
 5     @Override
 6     public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
 7         //如果接口返回类型本身就是ResultVO那就没必要进行额外的操作,返回false
 8         String name = methodParameter.getMethod().getDeclaringClass().getName();
 9         return Objects.nonNull(name) && name.contains("xx.xx.controller") && !methodParameter.getParameterType().equals(ResultVO.class);
10     }
11 
12     @Override
13     public Object beforeBodyWrite(Object data, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
14         // String类型不能直接包装,所以要进行些特别的处理
15         if (methodParameter.getGenericParameterType().equals(String.class)) {
16             ObjectMapper objectMapper = new ObjectMapper();
17             try {
18                 // 将数据包装在ResultVO里后,再转换为json字符串响应给前端
19                 return objectMapper.writeValueAsString(new ResultVO<>(data));
20             } catch (JsonProcessingException e) {
21                 throw new APIException("返回String类型错误");
22             }
23         }
24         //对于分页返回结果处理
25         if (methodParameter.getParameterType().equals(Page.class)) {
26             Page page = (Page) data;
27             PageVO result = new PageVO();
28             result.setPage(page.getPageNum());
29             result.setSize(page.getPageSize());
30             result.setTotal(page.getTotal());
31             result.setDataList(page.getResult());
32             return new ResultVO<>(result);
33         }
34         // 将原本的数据包装在ResultVO里
35         return new ResultVO<>(data);
36     }
37 }

通过这个例子,我们可以发现如果在开发业务过程中存在大量模板代码,那就是时候去优化了。

标签:return,userSettleQueryDTO,ResultVO,杂谈,业务,代码优化,result,new,page
来源: https://www.cnblogs.com/mczhou2/p/15194084.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有