12-SpringBoot工程中的响应标准设计及实现

林林总总
• 阅读 774

背景分析

在基于C/S架构的编程模型中,客户端往往需要对服务端返回的数据,基于状态的不同进行不同的处理。例如,正确的状态数据一种呈现方式,错误的状态数据是另外一种呈现方式。于是服务端响应数据的标准化设计油然而生。

响应标准设计

在响应数据标准化设计时,首先要对响应数据进行分析,哪些数据要响应到客户端,对这些数据进行怎样的状态设计等。假如现在响应的业务数据包含三部分:状态,消息,具体数据。我们可以这样设计,例如:

package com.cy.pj.common.pojo;

/**
 * 基于此对象封装服务端响应到客户端的数据
 */
public class ResponseResult {
    /**响应状态码(有的人用code)*/
    private Integer state=1;//1表示ok,0表示error,.....
    /**状态码对应的信息*/
    private String message="ok";
    /**正确的响应数据*/
    private Object data;

    public ResponseResult(){}

    public ResponseResult(String message){//new ResponseResult("delete ok"),
        this.message=message;
    }
    public ResponseResult(Object data){//new ResponseResult(list);
        this.data=data;
    }
    public ResponseResult(Throwable e){//new ResponseResult(e);
        this.state=0;
        this.message=e.getMessage();
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

响应数据的封装

在Controller类的逻辑方法中进行正常的响应数据封装,例如:

package com.cy.pj.module.controller;

import com.cy.pj.common.pojo.ResponseResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ArithmeticController {

      @RequestMapping("/doCompute/{n1}/{n2}")
      public ResponseResult doCompute(@PathVariable  Integer n1, @PathVariable Integer n2){
          Integer result=n1/n2;
          ResponseResult r=new ResponseResult("计算结果:"+result);
          r.setData(result);
          return r;
      }
}

在全局异常处理对象中进行异常响应数据的封装,例如:

package com.cy.pj.common.web;

import com.cy.pj.common.pojo.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestControllerAdvice
public class GlobalExceptionHandler {
      private static final Logger log= LoggerFactory.getLogger(GlobalExceptionHandler.class);//2
      @ExceptionHandler(ArithmeticException.class)
      public ResponseResult doHandleArithmeticException(ArithmeticException e){
          e.printStackTrace();
          log.info("exception {}",e.getMessage());
          return new ResponseResult(e);//封装异常结果
      }
}

总结(Summary)

本小节主要讲解了Spring Boot工程中对逻辑数据的响应如何进行标准化设计,为什么这样设计,这样设计的好处以及如何设计。通过对这一小节的学习要提高其响应规范维度的设计理念,掌握基本技能。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
PB级海量数据服务平台架构设计实践
基于PB级海量数据实现数据服务平台,需要从各个不同的角度去权衡,主要包括实践背景、技术选型、架构设计,我们基于这三个方面进行了架构实践,下面分别从这三个方面进行详细分析讨论:实践背景该数据服务平台架构设计之初,实践的背景可以从三个维度来进行说明:当前现状、业务需求、架构需求,分别如下所示:当前现状收集了当前已有数据、分工、团队
菜园前端 菜园前端
2年前
CSS布局方式-响应式布局
原文链接:什么是响应式布局?在不同屏幕分辨率下,能够以最佳的方式进行展示,元素的宽度尺寸以及展示方式可能会改变。通常使用@media多媒体查询来实现响应式布局。优点页面能够兼容不同分辨率的屏幕。缺点工作量大,UI需要设计多个平台的版本。场景一套代码兼容we
kenx kenx
2年前
SpringBoot定义优雅全局统一Restful API 响应框架三
我们目前已经设计出了,包含全局响应,异常错误响应进行了统一返回。但是错误内容我们设计的比较模糊统一,还可以进行细化这样更有利于定位错误当我们需要调用Http接口时,无论是在Web端还是移动端,都有可能遇到各种错误,例如参数缺失、类型错误、系统错误等。为了规
Wesley13 Wesley13
3年前
Spring MVC入门
2.1、SpringWebMVC是什么SpringWebMVC是一种基于Java的实现了WebMVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求响应模型,框架的目的就是帮助我们简化开发,SpringWebMVC也是要简化我们日常Web开发的。另外还有一种基于
Stella981 Stella981
3年前
Django基础
http协议请求的格式(request)请求方式URLHTTP/1.1k1:v1k1:v2请求数据响应的格式(response)、HTTP/1.1状态描述k
Stella981 Stella981
3年前
Django_初识
HTTP协议超文本传输协议(应用层的,基于tcp\ip协议的)特点:无状态,无连接(短连接)请求消息格式:请求行\请求头部\空行\请求数据请求行:GET路径HTTP/1.1响应消息格式:响应行\响应头部\空行\响应数据响应行:HTTP/1.1状态码状态
Wesley13 Wesley13
3年前
HTTP状态码
消息(1字头)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。100Continue客户端应当继续发送请求。这个临时响应是
Stella981 Stella981
3年前
DolphinDB与InfluxDB对比测试报告
DolphinDBDatabase是一款分析型的分布式时序数据库,内置处理流式数据处理引擎,具有内置的并行和分布式计算的功能,并提供分布式文件系统,支持集群扩展。DolphinDB以C编写,响应速度极快。提供类似于Python的脚本语言对数据进行操作,支持类标准SQL的语法。提供其它常用编程语言的API,方便与已有应用程序集成。在金融领域中的历史数据
React技术栈支援Vue项目,你需要提前了解的 | 京东云技术团队
写在前面react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟domreact的思路通过js来生成htm
赵颜 赵颜
1年前
电源设计:同步整流带来的不仅仅是高效率
您是否曾经应要求设计过一种轻负载状态下具有良好负载瞬态响应的电源呢?如果是,并且您还允许电源非连续,那么您可能会发现控制环路的增益在轻负载状态下急剧下降。这会导致较差的瞬态响应,并且需要大量的输出滤波电容器。一种更简单的方法是让电源在所有负载状态下都为连续
融云IM即时通讯 融云IM即时通讯
9个月前
融云IM干货丨 在优化IM服务API接口时,有哪些常见的性能瓶颈?
在优化IM服务API接口时,常见的性能瓶颈主要包括以下几个方面:数据库瓶颈:SQL查询过慢:数据库中的SQL查询没有经过优化,查询复杂,索引设计不合理,或者需要对大量数据进行扫描,导致数据库响应变慢。数据库连接池耗尽:在高并发请求场景下,数据库连接池中的连
林林总总
林林总总
Lv1
因为她才一米六,所以一旦吵架了,我就必须先低头。
文章
4
粉丝
0
获赞
0