一.定义接口返回包装类

package com.example.auth.filter;import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> {private int code;private String msg;private T data;public static <T> Response<T> ok(T data) {int okCode = 200;return new Response<>(okCode, "请求成功", data);}
}

2、编写ResponseBodyAdvice接口实现

(controller的值返回成功后会走这里的方法,对结果进行二次封装。@RestControllerAdvice注解和ResponseBodyAdvice接口实现统一处理controller返回)

package com.example.auth.config;import com.alibaba.fastjson.JSON;
import com.example.auth.filter.Response;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@RestControllerAdvice(basePackages = "com.example.auth.provider.controller")
public class ApiResponseBody implements ResponseBodyAdvice<Object> {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 防止二次封装if (body instanceof Response) {return body;}// 处理controller返回为字符串时, 转换报异常的bug(默认使用的jackson转换器会报类型转换的错,感兴趣可以跟下源代码)//(如果使用FastJsonHttpMessageConverter,则不需要加下面if判断)if (body instanceof String) {return JSON.toJSONString(Response.ok(body));}return Response.ok(body);}
}

3.controller编写

package com.example.auth.provider.controller;import com.example.auth.provider.model.User;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.jws.soap.SOAPBinding;@RestController
@Api(tags = {"接口鉴权"})
@RequestMapping(value = "/authentication")
public class UserController {@PostMapping("/getUser")public User getUser(int id) {User user1 = new User(1, "王云召");User user2 = new User(2, "王云盼");User user3 = new User(3, "啥也不是");User user4= new User();if (id == user1.getId()) {return user1;} else if (id == user2.getId()) {return user2;}return user4;}}

4.结果

SpringBoot定义统一的controller返回格式相关推荐

  1. 【Flask项目2】定制统一的JSON返回格式(6)

    comment-utils-output.py from flask import make_response, current_app from flask_restful.utils import ...

  2. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

    大家好,我是磊哥. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...

  3. springboot优雅地统一返回格式

    web后端开发,统一后端数据的返回格式是每个项目都应该做的,得益于springboot的方法拦截,因此基于springboot可以非常优雅地统一返回的数据格式,以下是实现代码(演示的返回格式:{cod ...

  4. 基于springboot整合了mybatis plus,lombok,log4j2并实现了全局异常处理及统一数据返回格式(code,msg,data)

    1. 背景 由于微服务的流行,我们会动不动就建立一个新的项目作为一个服务,那么项目中的全局异常处理和统一数据格式是很重要的,如果设计不好,不仅开发时很乱,在查询日志时也会相当麻烦,所以我自己设计了一个 ...

  5. api laravel 统一返回方法_你写的API接口代码真的烂,难道不能对返回格式统一处理一下吗?...

    随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大家各执其职,效率也非常的高,但是随着接口的增加,如果不统一的规范 ...

  6. springboot包装controller返回值

    1.springboot项目统一包装返回值,通常返回结果包含code.message.data,结构如下 import lombok.AllArgsConstructor; import lombok ...

  7. java异常统一处理,Controller层的异常统一处理及返回

    Controller层的异常统一处理及返回 一.为什么要做这件事? 不知道你平时在写Controller层接口的时候,有没有注意过抛出异常该怎么处理,是否第一反应是想着用个try-catch来捕获异常 ...

  8. 在asp.net core 下定义统一的入参和出参格式

    在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为了需求 ...

  9. Java设计API 接口统一返回格式

    前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式. 一般系统的大致整体架构图如下: 本篇关注点为API接口,所以架构图有所不同 接口交互 前端和后端进行 ...

最新文章

  1. 小程序音频播放报10001 解决方案 errCode:10001, errMsg:errCode:602,err:error,not found param
  2. numpy-自定义ufunc函数和广播
  3. unity3d 2D版本见缝插针demo
  4. Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)
  5. 常见计算机故障维修实验报告,实训报告12微机常见故障处理实训报告
  6. 看 AWS 如何通过 Nitro System 构建竞争优势
  7. 云服务器安卓虚拟机,云服务器安装安卓虚拟机
  8. 解决output directory already exists
  9. python曲线拟合准确度评估_使用Python SciPy量化曲线拟合的质量
  10. Devc++使用及debug超详解
  11. 微信群活码的原理及其作用,以及活码怎么使用
  12. 制造业MES生产管理系统程序代码 MES源码
  13. anti-debug你必须知道的基础篇 All in one
  14. python实现一元二次方程求解
  15. 深圳女子疑丈夫有外遇 捂死一双儿女
  16. 实现原理 扫描枪_扫描枪的工作原理
  17. 双十一广告弹窗问题找到了!金山词霸,原来是你!
  18. Redis集群搭建(多机集群)
  19. 泛微协同管理应用平台e-cology怎么样?
  20. 关于优惠券中经济学与心理学

热门文章

  1. linux c 各头文件作用总结
  2. Windows驱动中的Crash回调
  3. ring0下的 fs:[124]
  4. UNREFERENCED_PARAMETER的作用 (unreferenced formal parameter 警告)
  5. CButtonST的用法详解!
  6. Linux C编程--string.h函数解析
  7. java解锁_Java 姿势解锁 —— Lists.transform
  8. linux用数字方式显示文件权限,全面解析Linux数字文件权限
  9. 江苏省计算机一级考试知识点总结,江苏省计算机一级考试注意要点1
  10. PHP Mysql 网站迁移,Linux+PHP+MySql网站迁移配置