SpringBoot 通用返回类设计

在项目中通常需要为前端设计通过的返回类,返回的格式为:

{
    "status": "success",
    "data": {...}
}

定义通过返回类:CommonReturnType

/**
 * 通用返回结果类
 * 包含请求结果 status : "success" or "failed"
 * 包含请求数据 data : {}
 */
public class CommonReturnType {

    // 表明对应请求的返回处理结果为: "success" or "failed"
    private String status;

    // 若status=success, 则data内返回前端需要的json数据
    // 若status=failed, 则data内使用通用的错误码格式
    private Object data;

    // 通用静态工厂方法
    public static CommonReturnType create(Object result){
        return CommonReturnType.create(result, "success");
    }

    // 封装返回数据data
    public static CommonReturnType create(Object result, String status){
        CommonReturnType returnType = new CommonReturnType();
        returnType.setStatus(status);
        returnType.setData(result);
        return returnType;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Object getData() {
        return data;
    }

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

在Controller中使用

    @GetMapping("/get")
    @ResponseBody
    public CommonReturnType getUser(@RequestParam(name = "id") Integer id) throws BusinessException {

        // 调用service服务获取对应id的用户对象并返回给前端
        UserModel userModel = userService.getUserById(id);

        // 获取对应的用户不存在
        if(userModel == null){
            throw new BusinessException(EnumBusinessError.USER_NOT_EXIST);
        }

        // 将核心领域模型用户对象转换为可供UI使用的ViewObject,而不是直接将UserModel返回给前端
        UserVO userVO = convertFromModel(userModel);

        // 返回通用对象
        return CommonReturnType.create(userVO);
    }

原文地址:https://www.cnblogs.com/vincenshen/p/10422150.html

时间: 2024-10-10 02:14:53

SpringBoot 通用返回类设计的相关文章

通用分页请求返回类

using System.Runtime.Serialization; /// <summary> /// 通用分页请求类 /// </summary> [DataContract] public class PagedListModelReq : Request { /// <summary> /// <strong>Initializes a new instance of the <see cref="</strong>Op

C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)

[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之完善,以及面向对象的封装.继承.多态,有了这些特性,何不把数据库操作封装成为一个通用的类呢,此文由此铺展而来... [实现功能] 这篇文章将要介绍的主要内容如下: 1.ADO.NET之SqlServer 2.ADO

Hibernate之实体类设计基本步骤

1.先设计一个基类BaseBean (1)@MappedSuperclass表示实体类父类 package com.life.hibernate.bean; import java.util.Date; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Temporal; im

C#操作SqlServer MySql Oracle通用帮助类

C#操作SqlServer MySql Oracle通用帮助类 [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之完善,以及面向对象的封装.继承.多态,有了这些特性,何不把数据库操作封装成为一个通用的类呢,此文由此铺展而来... [实现功能] 这篇文章将要介绍的主

亿级数据的高并发通用搜索引擎架构设计(转-张宴)

[文章作者:张宴 本文版本:v1.0 最后修改:2008.12.09 转载请注明原文链接:http://blog.zyan.cc/post/385/] 曾经在七月,写过一篇文章──<基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计>, 前公司的分类信息搜索基于此架构,效果明显,甚至将很大一部分带Where条件的MySQL SQL查询,都改用了Sphinx+MySQL搜索.但是,这套架构仍存在局限:一是MySQL本身的并发能力有限,在200-300个并发连接下,查询 和更新就

Android基类设计方法详解

1 为什么要设计基类 为什么要给程序设计基类呢?主要是出于2个原因,一是方便代码编写,减少重复代码和冗余逻辑,优化代码:二是优化程序架构,降低耦合度,方便拓展.修改. ok,编写代码是程序员的第一步,那么第二步就是要编写高质量的代码,代码能实现功能是一方面,写的优美则是另一方面,这也是我们所有攻城狮们应该追求的境界. 2 设计基类的基本思路 那么,哪些东西我们需要抽象到基类中呢? 2.1 重复的代码:如果一个逻辑是大多数子类都需要使用的 2.2 臭而长的代码:典型的findviewbyid.To

C#:数据库通用访问类 SqlHelper

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Globalization; using System.IO; using System.Text.RegularExpressions; using System.Xml; using System.Reflection;

类设计中几种继承方式

 通过继承能够从已有的类派生出新的类,而派生类继承了基类的特征,包括方法.正如继承一笔财产要比自己白手起家容易一样,通过继承派生出的类通常比设计新类要容易得多.下面是可以通过继承完成的一些工作. ①可以在已有类的基础上添加功能. ②可以给类添加数据. ③可以修改类方法的行为. C++有三种继承方式:公有继承.保护继承和私有继承. 一.公有继承 公有继承是最常用的方式,它建立一种is-a关系,即派生类对象也是一个基类对象,可以对基类对象执行的任何操作,也可以对派生类对象执行. ①公有继承不建立

通用窗口类 Inventory Pro 2.1.2 Demo1(中)

本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如NoticeUI等). 本篇涉及的功能用加出标出,具体的功能如下: 1.实现了两个窗口,通过点击键盘I来,打开或者关闭窗口也就是Toggle功能 2.装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置 3.窗口具有拖拽功能 4.窗口物品具有拖拽,及窗口间拖拽 5.可以在窗口使用物品的功能,物