• spring boot 给返回值加状态 BaseData


    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

      

     1 package com.zpark.tools.interceptor;
     2 
     3 import com.zpark.response.ReturnDto;
     4 import org.springframework.core.MethodParameter;
     5 import org.springframework.http.MediaType;
     6 import org.springframework.http.converter.json.MappingJacksonValue;
     7 import org.springframework.http.server.ServerHttpRequest;
     8 import org.springframework.http.server.ServerHttpResponse;
     9 import org.springframework.web.bind.annotation.RestControllerAdvice;
    10 import org.springframework.web.servlet.mvc.method.annotation.AbstractMappingJacksonResponseBodyAdvice;
    11 
    12 /**
    13  * @author cosmo
    14  * @Title: CommonWrsControllerAdvice
    15  * @ProjectName
    16  * @Description: TODO
    17  * @date  
    18  */
    19 @RestControllerAdvice
    20 public class CommonWrsControllerAdvice extends AbstractMappingJacksonResponseBodyAdvice {
    21     @Override
    22     protected void beforeBodyWriteInternal(MappingJacksonValue mappingJacksonValue, MediaType mediaType, MethodParameter methodParameter, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
    23         if (methodParameter.getMethod().isAnnotationPresent(RerutnWrapper.class)) {
    24             mappingJacksonValue.setValue(getWrapperResponse(methodParameter,serverHttpRequest, mappingJacksonValue.getValue()));
    25         }
    26     }
    27 
    28     private ReturnDto getWrapperResponse(MethodParameter returnType, ServerHttpRequest req, Object data) {
    29         ReturnWrapper wrapper=returnType.getMethod().getAnnotation(ReturnWrapper.class);
    31         BaseData = new BaseData();
    32         returnDto.setData(data);
    33         returnDto.setreturnCode(wrapper.ReturnCode());
    34         return returnDto;
    35     }
    37 }

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

     1   /**
     2      * 测试.
     3      *
     4      * @return the attachment info
     5      */
     6     @ResponseBody
     7     @RequestMapping(value = {"test"})
     8     @RestWrapper(msg = ReturnInfoUtils.GETSUCCESS)
     9     public List<Employee> test() {
    10         List<Employee> employeeList=new ArrayList<>();
    11         Employee employee=new Employee();
    12         employee.setName("lisi");
    13         employeeList.add(employee);
    14         return employeeList;
    15     }
    16  

    返回数据:

    {
        "returnCode": "SUCCESS",
        "returnMsg": "操作成功",
        "data": [
            {
                "name": "lisi"
            }
        ]
    }
  • 相关阅读:
    andorid jar/库源码解析之Butterknife
    JavaScript DOM 鼠标拖拽
    JavaScript JSON 与 AJAX
    JavaScript DOM 事件模型
    JavaScript DOM 样式操作
    JavaScript DOM 常用尺寸
    JavaScript 日期与计时器
    JavaScript DOM 基础
    JavaScript 数组
    JavaScript 对象拷贝
  • 原文地址:https://www.cnblogs.com/qinxu/p/10196478.html
Copyright © 2020-2023  润新知