189 8069 5689

如何约定前后端对接数据格式

本篇内容主要讲解“如何约定前后端对接数据格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何约定前后端对接数据格式”吧!

成都创新互联公司主营蒙山网站建设的网络公司,主营网站建设方案,重庆APP开发,蒙山h5微信小程序开发搭建,蒙山网站营销推广欢迎蒙山等地区企业咨询

格式约定

清单1:返回信息格式约定源码示例

package site.syksy.qingzhou.web.response;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import java.io.Serializable;

/**
 * @author Raspberry
 */
@Schema(title = "返回信息")
public class ResponseMessage implements Serializable {
    private static final long serialVersionUID = 1L;

    @Schema(title = "是否成功")
    private Boolean success;

    @Schema(title = "数据")
    private T data;

    @Schema(title = "错误码")
    private String errorCode;

    @Schema(title = "错误信息")
    private String errorMessage;

    /**
     * error display type: 0 silent; 1 message.warn; 2 message.error; 4 notification; 9 page
     */
    @Schema(title = "错误信息显示类型")
    private Integer showType;

    /**
     * Convenient for back-end Troubleshooting: unique request ID
     */
    @Schema(title = "唯一请求ID")
    private String traceId;

    /**
     * onvenient for backend Troubleshooting: host of current access server
     */
    @Schema(title = "当前访问服务器的主机")
    private String host;
	
    ......省略部分代码,详细请到轻舟源码中查找......
}

ResponseMessage 类中的属性是依据 ant design pro 文档中推荐。

统一包装

约定好前后端交互数据格式后,我们将在每个 HTTP 接口方法中对返回结果进行包装,但这样显得冗余。这些重复冗余的代码能否集中处理呢?当然是可以的!只需创建一个类,实现 **ResponseBodyAdvice **接口,再加上一个注解 **@RestControllerAdvice **就能实现统一对返回结果进行包装处理,具体请看清单2中的源码。

清单2:统一包装返回信息源码示例

package site.syksy.qingzhou.web.response;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
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.ResponseBodyAdvice;

/**
 * @author Raspberry
 */
@RestControllerAdvice
public class GeneralResponseBodyAdvice implements ResponseBodyAdvice {
    private final static String PACKAGE_PATH = "site.syksy.qingzhou";

    @Override
    public boolean supports(MethodParameter methodParameter, Class> aClass) {
        String className = methodParameter.getMethod().getDeclaringClass().getName();
        if (className.startsWith(PACKAGE_PATH)) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        if (o instanceof ResponseMessage) {
            return o;
        }
        if (o instanceof String) {
            return ResponseMessage.success(o).toJSON();
        }
        return ResponseMessage.success(o);
    }
}

**GeneralResponseBodyAdvice **类中的两个方法解释如下:

  1. supports:通过检查 Controller 类包路径是否匹配 site.syksy.qingzhou,返回 ture ,则会执行 beforeBodyWrite 方法。

  2. beforeBodyWrite:先对 Controller 返回结果进行判断,是否已包装过(类型属于 ResponseMessage ),是否是 String 类型( String 类型,后续转换器不会将其转成 json)。如果以上判断皆未通过,将对结果包装成 ResponseMessage 格式。

清单2示例中通过包路径来约束,也可通过其它方式来约束。不过注意,一定要约束范围,否则如 springdoc-openapi 的接口也将包装,则访问 swagger ui 时将不能正确解析。

到此,相信大家对“如何约定前后端对接数据格式”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网页名称:如何约定前后端对接数据格式
文章出自:http://cdxtjz.cn/article/jchjed.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。