通用后端响应返回结果对象

import exception.ImoocMallExceptionEnum;

/**
 * 描述:     通用返回对象
 */
public class ApiRestResponse<T> {

    private Integer status;

    private String msg;

    private T data;

    private static final int OK_CODE = 10000;

    private static final String OK_MSG = "SUCCESS";

    public ApiRestResponse(Integer status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public ApiRestResponse(Integer status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public ApiRestResponse() {
        this(OK_CODE, OK_MSG);
    }

    public static <T> ApiRestResponse<T> success() {
        return new ApiRestResponse<>();
    }

    public static <K> ApiRestResponse<K> success(K result) {
        ApiRestResponse<K> response = new ApiRestResponse<>();
        response.setData(result);
        return response;
    }

    public static <T> ApiRestResponse<T> error(Integer code, String msg) {
        return new ApiRestResponse<>(code, msg);
    }

    public static <T> ApiRestResponse<T> error(ImoocMallExceptionEnum ex) {
        return new ApiRestResponse<>(ex.getCode(), ex.getMsg());
    }

    @Override
    public String toString() {
        return "ApiRestResponse{" +
                "status=" + status +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }

    public Integer getStatus() {
        return status;
    }

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

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

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

    public static int getOkCode() {
        return OK_CODE;
    }

    public static String getOkMsg() {
        return OK_MSG;
    }
}
package exception;

/**
 * 描述:     异常枚举
 */
public enum ImoocMallExceptionEnum {
    NEED_USER_NAME(10001, "用户名不能为空"),
    NEED_PASSWORD(10002, "密码不能为空"),
    PASSWORD_TOO_SHORT(10003, "密码长度不能小于8位"),
    NAME_EXISTED(10004, "不允许重名"),
    INSERT_FAILED(10005, "插入失败,请重试"),
    WRONG_PASSWORD(10006, "密码错误"),
    NEED_LOGIN(10007, "用户未登录"),
    UPDATE_FAILED(10008, "更新失败"),
    NEED_ADMIN(10009, "无管理员权限"),
    PARA_NOT_NULL(10010, "参数不能为空"),
    CREATE_FAILED(10011, "新增失败"),
    REQUEST_PARAM_ERROR(10012, "参数错误"),
    DELETE_FAILED(10013, "删除失败"),
    MKDIR_FAILED(10014, "文件夹创建失败"),
    UPLOAD_FAILED(10015, "图片上传失败"),
    NOT_SALE(10016, "商品状态不可售"),
    NOT_ENOUGH(10017, "商品库存不足"),
    CART_EMPTY(10018, "购物车已勾选的商品为空"),
    NO_ENUM(10019, "未找到对应的枚举"),
    NO_ORDER(10020, "订单不存在"),
    NOT_YOUR_ORDER(10021, "订单不属于你"),
    WRONG_ORDER_STATUS(10022, "订单状态不符"),
    SYSTEM_ERROR(20000, "系统异常,请从控制台或日志中查看具体错误信息");
    /**
     * 异常码
     */
    Integer code;
    /**
     * 异常信息
     */
    String msg;

    ImoocMallExceptionEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java高并发高性能分布式框架从无到有微服务架构设计 Java高并发高性能分布式框架从无到有微服务架构设计 微服务架构模式(Microservice Architect Pattern)。近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互 相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服 务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生 产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言 ,应根据业务上下文,选择合适的语言、工具对其进行构建。微服务架构优势 首先简单介绍了微服务(Microservices)的内涵及优势,微服务架构的本质,是用一些 功能比较明确、业务比较精练的服务去解决更大、更实际的问题。微服务架构将服务拆 分,分别采用相对独立的服务对各方面进行管理,彼此之间使用统一的接口来进行交流 ,架构变得复杂,优势也很明显: 复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专 注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每 个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。什么 即当堆内存不足时,可以强制回收这部分内存释放堆内存空间。一般使用堆缓存存储较 热的数据。有Guava Cache: 缓存和ConcurrentMap是非常相像的,但是它们也不完全一样。最根本的区别就是,Con currentMap会持有所有添加的对象,直到被显示的移除。而缓存为了限制其内存的使用 ,通常都会配置成可以自动的将对象移除。在某些情况下即使不自动移除对象也是非常 有用的,如LoadingCache它会自动加载缓存对象。Ehcache 3.x:是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一 个gzip缓存servlet过滤器,支持REST和SOAP api等特点。MapDB: mapdb是一个内嵌的纯java的数据库,提供了并发的HashMap、TreeMap、Queue,可以基 于堆外或者磁盘来存储数据高并发-应用缓存堆外缓存 即缓存数据存储在堆外内存,可以减少GC暂停时间(堆对象转移到堆外,GC扫描和移动 的对象变少),但是,读取数据时需要序列化/反序列化,因此会比堆缓存要慢很多。有 Ehcache 3.x、MapDB实现磁盘缓存 即缓存数据存储在磁道上,在JVM重启时数据还存在的,而堆缓存/堆外缓存数据会丢失 ,需要重新加载。有Ehcache 3.x、MapDB实现分布式缓存 进程内缓存和磁盘缓存,在多JVM实例的情况下,会存在两个问题: 1、单机容量问题; 2、数据一致性问题(多台JVM实例的缓存数据不一致怎么办?),这个问题不用纠结, 既然数据允许缓存,则表示允许一定时间内的不一致,因此可以设置缓存数据的过期时 间来定期更新数据; 3、缓存不命中时,需要回源到DB/服务请求多变问题:每个实例在缓存不命中的情况下 都会回源到DB加载数据,因此多实例后DB整体的访问量变多了解决办法是可以使用如一 致性哈希分片算法。因此,这些情况可以考虑使用分布式缓存来解决。 可以使用ehcache –clustered(配合 Terracotta server) 实现JAVA进程间分布式缓存。最好的办法是使用redis实现分布式缓存。高并发- HTTP缓存浏览器缓存是指当我们使用浏览器访问一些网站页面或者http服务时,根据服 务端返回的缓存设置响应头将响应内容缓存到浏览器,下次可以直接使用缓存内容或者 仅需要去服务端验证内容是否过期即可。这样的好处可以减少浏览器和服务端之间来回 传输的数据量,节省带宽提升性能。 解决办法:内容不需要动态(计算、渲染等)速度更快,内容越接近于用户速度越快。 像apache traffic server、squid、varnish、nginx等技术都可以来进行内容缓存。还有CDN就是用来加速 用户访问的:即用户首先访问到全国各地的CDN节点(使用如ATS、Squid实现),如果C DN没命中,会回源到中央nginx集群,该集群如果没有命中缓存(该集群的缓存不是必须 的,要根据实际命中情况等决定),最后回源到后端应用集群。高并发- 多级缓存(分布式缓存)高并发- 池化在应用系统开发过程中,我们经常会用到池化技术,如对象池、连接池、线程池等 ,通过池化来减少一些消耗,以提升性能。 对象池通过复用对象
### 回答1: Pho 是一种面向流的编程语言,而 Python 是一种通用编程语言,可以用于开发后端应用程序。如果您想将 Pho 与 Python 后端集成,您可以使用 Python 的网络编程库(如 Flask 或 Django)来创建 REST API,然后使用 Pho 的网络库来发送 HTTP 请求和接收响应。这样,Pho 可以通过与 Python 后端的交互来实现与前端的交互。 ### 回答2: Pho接Python后端主要是指Pho语言与Python语言的集成和通信。Pho是一种面向对象的多代理系统编程语言,而Python是一种通用的高级编程语言。 首先,Pho与Python可以通过各自的API进行通信。通过Pho的API,可以在Pho程序中调用Python的函数和方法,从而利用Python的强大功能来处理数据、进行计算等。同样地,通过Python的API,可以在Python程序中调用Pho的类和方法,从而实现多代理系统的功能。 其次,Pho和Python可以通过共享数据结构来交换数据。例如,可以使用Pho中的实体(entity)来创建对象,并在Python中访问和操作这些对象。相反地,也可以在Python中创建对象,并在Pho中使用这些对象。这种数据结构的共享使得Pho和Python可以共同处理复杂的数据结构和算法。 此外,Pho和Python还可以通过消息传递来进行通信。Pho中的实体通过发送和接收消息的方式进行通信。可以在Pho中通过发送消息将数据传递给Python后端,Python后端进行处理后再通过发送消息返回结果给Pho。这种消息传递的方式可以实现基于事件的系统,以及分布式计算等功能。 总而言之,Pho接Python后端意味着Pho和Python之间可以进行双向的通信和数据共享,从而实现更加灵活和功能丰富的程序设计。这种集成有助于开发人员充分利用Pho和Python各自的优势,实现更加高效和强大的应用程序。 ### 回答3: Pho是一种用于构建以Web界面为中心的应用程序的低代码开发平台。而Python是一种高级编程语言,广泛用于Web开发、数据科学和人工智能等领域。将Pho接入Python后端,可以实现更加强大且灵活的应用开发。 首先,通过将Pho与Python后端集成,可以利用Pho的低代码开发特性快速搭建用户界面。Pho提供了丰富的预制组件和模板,使得开发者可以轻松构建用户友好的前端界面。然后,使用Python后端处理与数据库、API或其他外部资源的交互。Python作为一种功能强大的编程语言,具备丰富的库和框架,可以实现复杂的业务逻辑和数据处理。 其次,结合Pho和Python后端还可以实现前后端之间的数据交互。Pho提供了与后端的API通信的功能,可以通过HTTP请求和响应来实现数据的传输和处理。Python后端可以接收Pho发送的请求,然后进行相应的数据处理和逻辑运算,并将结果返回给Pho前端。 此外,Pho和Python后端的结合还可以实现系统的拓展和定制化开发。Pho提供了灵活的插件机制和扩展接口,使得开发者可以通过Python后端来开发自定义的插件或模块,以满足特定需求。通过这种方式,可以根据具体业务场景来拓展和定制化Pho应用。 总之,将Pho接入Python后端可以充分发挥二者的优势,快速构建功能强大、用户友好的应用程序。这种组合可以提高开发效率,实现更加灵活和定制化的应用开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值