zoukankan      html  css  js  c++  java
  • 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"
            }
        ]
    }
  • 相关阅读:
    Java基础——面向对象(继承应用)
    Java基础——数组例题&二维数组
    Java基础——面对对象-继承
    Java基础——this构造器转发 & 实例块、静态块
    spring mvc 映射与适配器
    Spring component-scan 标签的实现
    DUBBO 服务导出实现
    Idea
    ReentrantLock 实现
    C 语言程序设计
  • 原文地址:https://www.cnblogs.com/qinxu/p/10196478.html
Copyright © 2011-2022 走看看