JavaWeb开发中,需要给前端返回的数据加上一些头部的状态信息,来表示请求成功或失败的状态原因

一、数据添加状态信息

  1.新建BaseData

public class BaseData<T> {

    private String returnCode;
private String returnMsg;
private T data;
//其他的get set toString 方法略
}

  2.定义工具类:

public final class ReturnInfoUtils {
private ReturnInfoUtils(){}
//返回状态信息
public static final String SUCCESSCODE="100";
public static final String SUCCESSMSG="操作成功";
public static final String FAILCODE="500";
public static final String FAILMSG="操作失败";
}

  3.定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnWrapper { String returnCode() default ReturnInfoUtils.SUCCESSCODE;
String returnMsg() default ReturnInfoUtils.SUCCESSMSG;
}

  4.新建类继承AbstractMappingJacksonResponseBodyAdvice并重写一个切面方法beforeBodyWriteInternal

  

 package com.zpark.tools.interceptor;

 import com.zpark.response.ReturnDto;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJacksonValue;
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.AbstractMappingJacksonResponseBodyAdvice; /**
* @author cosmo
* @Title: CommonWrsControllerAdvice
* @ProjectName
* @Description: TODO
* @date
*/
@RestControllerAdvice
public class CommonWrsControllerAdvice extends AbstractMappingJacksonResponseBodyAdvice {
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue mappingJacksonValue, MediaType mediaType, MethodParameter methodParameter, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
if (methodParameter.getMethod().isAnnotationPresent(RerutnWrapper.class)) {
mappingJacksonValue.setValue(getWrapperResponse(methodParameter,serverHttpRequest, mappingJacksonValue.getValue()));
}
} private ReturnDto getWrapperResponse(MethodParameter returnType, ServerHttpRequest req, Object data) {
ReturnWrapper wrapper=returnType.getMethod().getAnnotation(ReturnWrapper.class);
BaseData = new BaseData();
returnDto.setData(data);
returnDto.setreturnCode(wrapper.ReturnCode());
return returnDto;
}
}

就可以用注解来返回的数据

   /**
* 测试.
*
* @return the attachment info
*/
@ResponseBody
@RequestMapping(value = {"test"})
@RestWrapper(msg = ReturnInfoUtils.GETSUCCESS)
public List<Employee> test() {
List<Employee> employeeList=new ArrayList<>();
Employee employee=new Employee();
employee.setName("lisi");
employeeList.add(employee);
return employeeList;
}

返回数据:

{
"returnCode": "SUCCESS",
"returnMsg": "操作成功",
"data": [
{
"name": "lisi"
}
]
}

spring boot 给返回值加状态 BaseData的更多相关文章

  1. spring boot 接口返回值封装

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. spring boot 接口返回值去掉为null的字段

    现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转 ...

  3. Spring Boot之配置文件值注入(@ConfigurationProperties)

    前言:Spring Boot配置文件值的注入有两种方式,分别是 @ConfigurationProperties @Value 这里我们使用第一种 首先我们创建一个application.yml文件, ...

  4. spring jdbcTemplate query 返回值为null

    spring jdbcTemplate query 返回值为null 今天使用以下方法从数据库中查询数据,返回列表 public List<BookBean> getBooks(){ St ...

  5. Spring boot之返回json数据

    1.步骤: 1. 编写实体类Demo 2. 编写getDemo()方法 3. 测试 2.项目构建 编写实体类Demo package com.kfit; /** * 这是一个测试实体类. */ pub ...

  6. Spring Boot 统一返回结果及异常处理

    在 Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 & 异常处理 基础上优化.调整 一.通用类 1.1 通用的返回对象 public class CommonReturn ...

  7. Spring MVC controller返回值类型

    SpringMVC controller返回值类型: 1 String return "user":将请求转发到user.jsp(forword) return "red ...

  8. spring boot 2 返回Date 格式化问题

    以前 返回数据把Date  转成 long的时间毫秒数.现在是格式化成了字符串. 默认的结果:"createDate": "2018-09-06T10:04:25.000 ...

  9. spring 添加controller返回值绑定

    @EnableWebMvc @Configuration public class Config { @Autowired private RequestMappingHandlerAdapter h ...

随机推荐

  1. Codeforces Round #350 (Div. 2) C. Cinema

    Moscow is hosting a major international conference, which is attended by n scientists from different ...

  2. 测试miniconda,python以及机器学习包是否安装成功

    1.测试安装版本 conda -V python -V 2.安装的命令 (1)库升级和安装 升级全部库:  conda upgrade --all [不知道为什么,我的conda install nu ...

  3. 软件开发者路线图梗概&书摘chapter7

    软件工程是一门技艺 原因:理解不足以系统化 技能:为交付可以工作的软件 重要的原因:了解不足以将它写成可供别人直接运用并得到相同成果的格式 大多数程序员低于平均水平 工艺:一套高度重视技能的训练和传统 ...

  4. 基于Selenium的web自动化框架

    转自 : https://www.cnblogs.com/AlwinXu/p/5836709.html 1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台. ...

  5. BLE和2.4G实现通信

    1. 背景 客户的项目是无线控制灯具,目前采用2.4G芯片,一端是2.4G遥控器,一端是2.4G灯具.现在客户的需求是在不增加成本的条件下增加手机APP控制.因为BLE芯片一般会比纯2.4G芯片价格高 ...

  6. TensorFlow机器学习实战指南之第一章

    TensorFlow基础 一.TensorFlow算法的一般流程 1.导入/生成样本数据集 2.转换和归一化数据:一般来讲,输入样本数据集并不符合TensorFlow期望的形状,所以需要转换数据格式以 ...

  7. Tempset 暴风射击

    发售年份 1980 平台 街机 开发商 雅达利(Atari) 类型 射击 https://www.youtube.com/watch?v=AMto2HJJSSA

  8. 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager

    大家好,  我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...

  9. RK3399/NanoPC-T4开发板低级格式化SD卡,恢复SD卡和TF卡 方法

    恢复SD卡和TF卡 方法:Windows下运行:HDDLLF.4.40.exe执行Low-Level format然后拔插,重新插在win10下提示格式化,则执行格式化操作,即可恢复. 应用场合:使用 ...

  10. python中的文件处理

    一 文件操作 (----------------------------------------------------------------------) 一 介绍 计算机系统分为:计算机硬件,操 ...