SpringBoot定义统一的controller返回格式
一.定义接口返回包装类
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返回格式相关推荐
- 【Flask项目2】定制统一的JSON返回格式(6)
comment-utils-output.py from flask import make_response, current_app from flask_restful.utils import ...
- SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!
大家好,我是磊哥. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...
- springboot优雅地统一返回格式
web后端开发,统一后端数据的返回格式是每个项目都应该做的,得益于springboot的方法拦截,因此基于springboot可以非常优雅地统一返回的数据格式,以下是实现代码(演示的返回格式:{cod ...
- 基于springboot整合了mybatis plus,lombok,log4j2并实现了全局异常处理及统一数据返回格式(code,msg,data)
1. 背景 由于微服务的流行,我们会动不动就建立一个新的项目作为一个服务,那么项目中的全局异常处理和统一数据格式是很重要的,如果设计不好,不仅开发时很乱,在查询日志时也会相当麻烦,所以我自己设计了一个 ...
- api laravel 统一返回方法_你写的API接口代码真的烂,难道不能对返回格式统一处理一下吗?...
随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大家各执其职,效率也非常的高,但是随着接口的增加,如果不统一的规范 ...
- springboot包装controller返回值
1.springboot项目统一包装返回值,通常返回结果包含code.message.data,结构如下 import lombok.AllArgsConstructor; import lombok ...
- java异常统一处理,Controller层的异常统一处理及返回
Controller层的异常统一处理及返回 一.为什么要做这件事? 不知道你平时在写Controller层接口的时候,有没有注意过抛出异常该怎么处理,是否第一反应是想着用个try-catch来捕获异常 ...
- 在asp.net core 下定义统一的入参和出参格式
在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为了需求 ...
- Java设计API 接口统一返回格式
前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式. 一般系统的大致整体架构图如下: 本篇关注点为API接口,所以架构图有所不同 接口交互 前端和后端进行 ...
最新文章
- 小程序音频播放报10001 解决方案 errCode:10001, errMsg:errCode:602,err:error,not found param
- numpy-自定义ufunc函数和广播
- unity3d 2D版本见缝插针demo
- Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)
- 常见计算机故障维修实验报告,实训报告12微机常见故障处理实训报告
- 看 AWS 如何通过 Nitro System 构建竞争优势
- 云服务器安卓虚拟机,云服务器安装安卓虚拟机
- 解决output directory already exists
- python曲线拟合准确度评估_使用Python SciPy量化曲线拟合的质量
- Devc++使用及debug超详解
- 微信群活码的原理及其作用,以及活码怎么使用
- 制造业MES生产管理系统程序代码 MES源码
- anti-debug你必须知道的基础篇 All in one
- python实现一元二次方程求解
- 深圳女子疑丈夫有外遇 捂死一双儿女
- 实现原理 扫描枪_扫描枪的工作原理
- 双十一广告弹窗问题找到了!金山词霸,原来是你!
- Redis集群搭建(多机集群)
- 泛微协同管理应用平台e-cology怎么样?
- 关于优惠券中经济学与心理学
热门文章
- linux c 各头文件作用总结
- Windows驱动中的Crash回调
- ring0下的 fs:[124]
- UNREFERENCED_PARAMETER的作用 (unreferenced formal parameter 警告)
- CButtonST的用法详解!
- Linux C编程--string.h函数解析
- java解锁_Java 姿势解锁 —— Lists.transform
- linux用数字方式显示文件权限,全面解析Linux数字文件权限
- 江苏省计算机一级考试知识点总结,江苏省计算机一级考试注意要点1
- PHP Mysql 网站迁移,Linux+PHP+MySql网站迁移配置