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"
}
]
}

最新文章

  1. - &gt;code vs 1475 m进制转十进制
  2. 身份证校验(java)
  3. django redirect的几种方式
  4. NOIp2010 关押罪犯
  5. Struts+Hibernate+jsp页面 实现分页
  6. UnityVS 2013的使用
  7. Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)
  8. 关于MapReduce
  9. svn各种问题总结
  10. webservice跨域上传图片
  11. Android学习笔记(二)Git和Github
  12. MongoDB的安装和配置(Windows系统)及遇到的常见问题解答
  13. 对图片进行索引,存入数据库sqlite3中,实现快速搜索打开
  14. [SQL]LeetCode596. 超过5名学生的课 | Classes More Than 5 Students
  15. 网页安全政策&quot;(Content Security Policy,缩写 CSP)
  16. 关系数据库、NoSQL和NewSQL数据库产品分类
  17. android recovery 升级之USB设备挂载
  18. MT【36】反函数有关的一道题
  19. Win10系列:VC++绘制几何图形1
  20. vue-webpack项目本地开发环境设置代理解决跨域问题

热门文章

  1. basic knowledge
  2. shell中的函数、数组、报警系统脚本
  3. vue列表拖拽组件 vue-dragging
  4. Cookie保存用户名和密码
  5. MySQL命令行登陆,远程登陆MySQL 的方法
  6. P2930 [USACO09HOL]假期绘画Holiday Painting
  7. 类似py2exe软件真的能保护python源码吗
  8. attr跟prop的区别:
  9. .net core 存储base64的图片或文件
  10. 友善RK3399/NanoPC-T4开发板wiringPi Python库访问GPIO外设实例讲解 -【申嵌视频】