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. Linux防火墙开启关闭查询

    1.centos7防火墙 命令含义: –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效 服务与端口的启 ...

  2. 我的代码-random forest

    # coding: utf-8 # In[1]: import pandas as pdimport numpy as npfrom sklearn import treefrom sklearn.s ...

  3. js处理数字加后缀w

    num > 9999 ? (Math.floor(num/1000)/10) + 'w' : num

  4. robotframework之滚动条

    在测试过程中遇到侧边栏以及下拉框中元素超过div长度时,会自动增加滚动条 网上对于robotframework中的滚动条信息只有: Execute Javascript document.docume ...

  5. 选择排序-C#

    选择排序包括:简单选择排序和堆排序 简单选择排序: 基本思路:从所有序列中先找到最小的,然后放到第一个位置.之后再看剩余元素中最小的,放到第二个位置……以此类推 /// <summary> ...

  6. Rogue 罗格

    发售年份 1980 平台 多平台 开发商 Michael Toy, Glenn Wichman, Ken Arnold 类型 策略/角色扮演 https://www.youtube.com/watch ...

  7. 左耳听风-ARTS-第4周(2019/4/21-2019/4/27)

    Algorithm 本周的算法题是删除已排序数据中的重复数字(https://leetcode.com/problems/remove-duplicates-from-sorted-array/).这 ...

  8. C 逻辑运算, 移位运算 , 取整 , 取模(取余)

    一. 按位运算 (快速操作数据的某个位) ^   按位异或 ~  按位取反 &  按位与 |  按位或 二. 逻辑运算 &&  逻辑与   有一个值为 0 ,值为 0 ||  ...

  9. Dart 语法

    Dart 语法 说明 var 类似于JavaScript中的var:最大的不同是Dart中var变量一旦赋值,类型便会确定,则不能再改变其类型 Object Object 是dart所有对象的根基类, ...

  10. windows的github教程

    如何向github提交变更1. 在github上面创建project,获得git地址:2. 来到windows,首先安装git:3. 在目标目录下:git clone https://github.c ...