springboot2 统一返回结果
统一返回结果是说,不用在controller层,new一个对象,或用工厂创建这个对象,再返回这个对象,而是这个Action该返回什么就返回什么,
我们再通过mvc的流程,再对返回对象做进一步的封装,以达到我们的目的。
以下是controller层代码:我们返回一个list
- @PostMapping("GetTask")
- public List<TaskResult> GetOpinionTaskHospitals(@RequestParam("month") Date month) {
- List<TaskResult> result = taskMgrService.GetTask(month, this.getCurrentUser());
- return result;
}
通常的webapi的返回结果中都会有一个是否成功的标识,还有状态码,错误消息,还有返回结果对象,如下列的代码:
- @Data
- public class AjaxResponse<T> {
- private Integer status;
- private String msg;
- private T data;
- }
最终返回的结果是这样的:
- {
- "status": 200,
- "msg": "",
- "data": [
- {
- "id": null,
- "hospitalId": "1101",
- "hospitalName": "1101"
- },
- {
- "id": null,
- "hospitalId": "1102",
- "hospitalName": "1102",
- },
- {
- "id": null,
- "hospitalId": "1103",
- "hospitalName": "1103",
- "month": "201602"
- }
- ]
- }
具体实现的方法如下:
- @Configuration
- public class RestReturnValueHandlerConfigurer implements InitializingBean {
- @Autowired
- private RequestMappingHandlerAdapter handlerAdapter;
- @Override
- public void afterPropertiesSet() throws Exception {
- List<HandlerMethodReturnValueHandler> list = handlerAdapter.getReturnValueHandlers();
- List<HandlerMethodReturnValueHandler> newList = new ArrayList<>();
- if (list != null) {
- for (HandlerMethodReturnValueHandler valueHandler: list) {
- if (valueHandler instanceof RequestResponseBodyMethodProcessor) {
- HandlerMethodReturnValueHandlerProxy proxy = new HandlerMethodReturnValueHandlerProxy(valueHandler);
- newList.add(proxy);
- } else {
- newList.add(valueHandler);
- }
- }
- }
- handlerAdapter.setReturnValueHandlers(newList);
- }
- }
- public class HandlerMethodReturnValueHandlerProxy implements HandlerMethodReturnValueHandler {
- private HandlerMethodReturnValueHandler proxyObject;
- public HandlerMethodReturnValueHandlerProxy(HandlerMethodReturnValueHandler proxyObject) {
- this.proxyObject = proxyObject;
- }
- @Override
- public boolean supportsReturnType(MethodParameter returnType) {
- return proxyObject.supportsReturnType(returnType);
- }
- @Override
- public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer,
- NativeWebRequest webRequest) throws Exception {
- AjaxResponse response = new AjaxResponse();
- response.setStatus(STATUS_CODE_SUCCEEDED);
- response.setMsg("");
- response.setData(returnValue);
- proxyObject.handleReturnValue(response, returnType, mavContainer, webRequest);
- }
- private static final int STATUS_CODE_SUCCEEDED = 200;
- }
统一返回的结果与异常返回的结果是同一对象 ,请参考上一篇统一异常返回。
springboot2 统一返回结果的更多相关文章
- Spring统一返回Json工具类,带分页信息
前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...
- Spring Boot 2.x(六):优雅的统一返回值
目录 为什么要统一返回值 ReturnVO ReturnCode 使用ReturnVO 使用AOP进行全局异常的处理 云撸猫 公众号 为什么要统一返回值 在我们做后端应用的时候,前后端分离的情况下,我 ...
- springboot2 统一异常处理
统一异常处理,不需要在每一层上单独捕获异常,只需要关注业务的开发: 代码如下: @RestControllerAdvice @Slf4j public class GlobalExceptionHan ...
- mb_strlen(,utf-8);可以除去中文字符,统一返回是几个字符
mb_strlen(,utf-8);可以除去中文字符,统一返回是几个字符
- springboot之全局处理统一返回
springboot之全局处理统一返回 简介 在REST风格的开发中,避免通常会告知前台返回是否成功以及状态码等信息.这里我们通常返回的时候做一次util的包装处理工作,如:Result类似的类,里面 ...
- spring boot 2 全局统一返回RESTful风格数据、统一异常处理
全局统一返回RESTful风格数据,主要是实现ResponseBodyAdvice接口的方法,对返回值在输出之前进行修改.使用注解@RestControllerAdvice拦截异常并统一处理. 开发环 ...
- ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)
现阶段,基本上都是前后端分离项目,这样一来,就需要前后端配合,没有统一返回格式,那么对接起来会很麻烦,浪费时间.我们需要把所有接口及异常错误信息都返回一定的Json格式,有利于前端处理,从而提高了工作 ...
- springboot统一返回json数据格式并配置系统异常拦截
本文链接:https://blog.csdn.net/syystx/article/details/82870217通常进行前后端分离开发时我们需要定义统一的json数据交互格式并对系统未处理异常进行 ...
- webapi接口统一返回请求时间
webapi接口统一返回请求时间: public class BaseController : ControllerBase { protected ReturnResult<T> Res ...
随机推荐
- 3.node的url属性
node的url属性 1.parse: [Function: urlParse],2.format: [Function: urlFormat],3.resolve: [Function: urlRe ...
- 【BZOJ3262】陌上花开 cdq分治
[BZOJ3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...
- highmaps如何自定义 区间的颜色刻度
https://api.highcharts.com/highmaps/colorAxis.dataClassColor http://jsfiddle.net/gh/get/library/pure ...
- Swift - 把汉字转换为拼音,并且截取首字母做索引用
var transformContents = CFStringCreateMutableCopy(nil, 0, "咋啊的看到回复阿斯顿发货发哦iasdifas") CFStri ...
- 树链剖分+离散+扫描(HDU5044)
Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- (贪心)kruskal思想
hdu4313 Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Oracle HA 之 基于活动数据库复制配置oracle 11.2 dataguard
规划:主库:db_name=dbking db_unique_name=dbkingpri 备库:db_name=dbking ...
- fork(2) - Linux man page
fork(2): create child process - Linux man page https://linux.die.net/man/2/fork fork(2) - Linux man ...
- UEM用户行为了如指掌!
“千呼万唤始出来”,万众期待的UEM正式与宝宝们见面啦~~~ 今天很多人来问小编,Web咋不见了,表急,Web并没有消失,而是重磅升级为UEM啦!!! 什么是UEM呢?UEM全称User Experi ...
- Disruptor的伪共享解决方案
1.术语 术语 英文单词 描述 内存屏障 Memory Barriers 是一组处理器指令,用于实现对内存操作的顺序限制. In the Java Memory Model a volatile fi ...