资讯专栏INFORMATION COLUMN

mpaas-springboot-base操作手册

陈江龙 / 692人阅读

摘要:介绍是得帆公司开发帮助开发者开发更规范更健壮的程序安装目前没有提交至中央仓库后续会提交到仓库目前只能采用本地安装方式安装前确认是否本地已安装执行以下命令行如能正常执行即可下载包执行以下命令将包安装至本地仓库

介绍

mpaas-springboot-base是得帆公司开发,帮助开发者开发更规范更健壮的spring boot程序

安装

目前没有提交至maven中央仓库,后续会提交到maven仓库.目前只能采用本地安装方式,安装前确认是否本地已安装maven.执行以下命令行,如能正常执行即可.

$ mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /Users/asan/u01/mvn
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.4", arch: "x86_64", family: "mac"

下载mpaas-springboot-base-v1.0.0.jar包,执行以下命令将jar包安装至本地仓库.

mvn install:install-file -Dfile="/Users/asan/workspace/mpaas/common/out/artifacts/mpaas-springboot-base_v1_0_0/mpaas-springboot-base-v1.0.0.jar" -DgroupId=com.definesys.mpaas -DartifactId=mpaas-springboot-base -Dversion=1.0.0 -Dpackaging=jar

修改项目pom.xml文件,增加依赖


    com.definesys.mpaas
    mpaas-springboot-base
    1.0.0
使用 配置启动类

修改启动类xxxApplication.java增加以下注解

@ComponentScan(basePackages = {"com.definesys.mpaas.common","启动类所在的包路径"})

spring boot默认扫描启动类所在的package下的类,要手动增加注解才能让spring boot扫描到mpaas-springboot-base.比如启动类全路径为com.definesys.demo.DemoApplication那么注解应该写成以下格式

@ComponentScan(basePackages = {"com.definesys.mpaas.common","com.definesys.demo"})

至此,你可以使用mpaas-springboot-base所有的功能.

接口返回

所有的controller返回值统一为com.definesys.mpaas.common.http.Response该类定义了一套标准返回格式和相关api

Response字段
    private String code = CODE_OK;  //操作结果编码 ok/error
    private String message;         //记录错误信息或者需要提示给用户的信息
    private Long total;             //记录总数
    private Object data;            //非列表数据
    private List table;     //列表数据
    private String requestid;       //请求uuid
    
    public static final String CODE_OK = "ok";
    public static final String CODE_ERR = "error";

规定如果是系统错误,如程序异常,空指针等,以http status形式返回500错误.程序应该返回一个code=error的并且http code=500的Response,但如果放在业务代码里处理不仅繁琐也容易忽略掉异常,导致有漏网之鱼.mpaas也提供了更为简便的方案,下面会提到.

从返回的数据类型来看,抽象出列表非列表两种数据,这边放到两个字段里,列表数据放到table非列表数据防到data

Response-Api:返回成功

1. 只返回code没有数据

Response ok=Response.ok();

输出

{
    "code": "ok",
    "requestid": "0f253675a20147d1b4b106404e4ed21d"
}

ps:每次请求服务器返回Response都会带一个唯一的requestid,该requestid可作为日志追踪业务查询等

2. 返回非列表数据

//Response ok=new Response()
Response ok=Response.ok();
Map data=new HashMap();
data.put("user","asan");
data.put("company","definesys");
ok.setData(data);

输出

{
    "code": "ok",
    "data": {
        "company": "definesys",
        "user": "asan"
    },
    "requestid": "2fcae4e453b746e6bfbf95fc76e1618b"
}

如果返回的数据都是key-value形式,也可以写成如下形式

Response ok = Response.ok().set("user", "asan")
                .set("company", "definesys")
                .set("email","jianfenng.zheng@definesys.com");

3. 返回列表数据

Listlist=new ArrayList<>();
list.add("jianfeng");
list.add("asan");
list.add("Mr.Zheng");
Response ok=Response.ok();
ok.setTable(list);

输出

{
    "code": "ok",
    "total": 3,
    "table": [
        "jianfeng",
        "asan",
        "Mr.Zheng"
    ],
    "requestid": "534435d7812d4810916abd9577b350cf"
}

同样也可以写成如下形式

Response ok = Response.ok().addListItem("jianfeng")
                .addListItem("asan")
                .addListItem("Mr.Zheng");

4. 返回错误

Response ok = Response.error("系统出错");

输出

{
    "code": "error",
    "message": "系统出错",
    "requestid": "a491589ed2b04fe1b1a7e4c73c29178e"
}
异常处理

这里将异常分为两类

运行时异常:指因为程序bug或者系统问题导致接口调用失败,属于不可预料异常

业务异常: 指业务数据不符合要求接口本身抛出异常

mpass也分别提供两个类MpaasRuntimeExceptionMpaasBusinessException对应运行时异常业务异常

下面以一个例子说明说明这两个异常使用方法

测试接口

@RequestMapping(value = "/testException")
    public Response testException(@RequestParam(value = "data") String data) {
        Integer value = null;
        try {
            value = Integer.parseInt(data);
        } catch (Exception ex) {
            throw new MpaasRuntimeException(ex);
        }
        if (value < 10) {
            throw new MpaasBusinessException("数据不合法请输入一个大于10的数字");
        }
        return Response.ok();
    }

RuntimeException(运行时异常)

$ curl http://localhost:8080/testException?data=a -v
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /testException?data=a HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 500   ##返回500
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Mon, 27 Aug 2018 10:58:41 GMT
< Connection: close
<
* Curl_http_done: called premature == 0
* Closing connection 0
{
    "code": "error",
    "message": "系统出错请联系管理员",
    "requestid": "f8beb8c1e817414ba0b2e856f22b0b4d"
}

BusinessException(业务异常)

$ curl http://localhost:8080/testException?data=9 -v
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /testException?data=9 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 ##返回200
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Mon, 27 Aug 2018 10:59:57 GMT
<
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
{
    "code": "error",
    "message": "数据不合法请输入一个大于10的数字",
    "requestid": "0ff8e520aa8548cba06be3d181fc0f7d"
}

ok

curl http://localhost:8080/testException?data=11 -v
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /testException?data=11 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Mon, 27 Aug 2018 11:01:41 GMT
<
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
{
    "code": "ok",
    "requestid": "8e5db7548fc34f5c95420b5ea23e9893"
}

在开发时,希望后台能够返回完整错误栈这样方便后台人员排查问题,可以在application.properties加入以下配置

spring.mpaas.mode=DEV
$curl http://localhost:8080/testException?data=a
{
    "code": "error",
    "message": "com.definesys.mpaas.common.exception.MpaasRuntimeException: java.lang.NumberFormatException: For input string: "a"
com.smec.remes.auto.controller.FastRepairController.testException(FastRepairController.java:50)

    ....
}

如果是运行时错误系统默认返回的错误信息为系统出错请联系管理员如果想更改该信息,可以在application.properties加入以下配置

spring.mpaas.mode=PROD
spring.mpaas.errormsg=提示信息的unnicode编码

如果是中文需要转成unicode编码,可以在http://tool.chinaz.com/tools/unicode.aspx这里进行转码.如想更改为系统出错请稍后再试转码之后配置

spring.mpaas.mode=PROD
spring.mpaas.errormsg=u7cfbu7edfu51fau9519u8bf7u7a0du540eu518du8bd5
$curl http://localhost:8080/testException?data=a
{
    "code": "error",
    "message": "系统出错请联系管理员",
    "requestid": "27c5ead8fa4a49e1b5cd44cc55ce130e"
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76859.html

相关文章

  • javascript操作符知识点整理

    摘要:中的操作符的不同之处在于,它们能够适用于很多值,例如字符串数字值布尔值甚至对象。在应用于布尔值时,先将其转换为再执行加减的操作。布尔值变量变为数值变量。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。 前言 初学者会觉得操作符的知识很简单,但是随着学习的深入会发现很多语句都可以用操作符来简化,所以深入理解操作符可以帮助你写出高性能的代码。这篇文章主要记录不同操作符所遵循...

    JerryZou 评论0 收藏0
  • C语言基础之操作符详解

    摘要:语言基础之操作符详解操作符的分类算术操作符移位操作符位操作符逻辑操作符逗号表达式表达式求值隐式类型转换算术转换操作符的属性今天就带各位大佬来了解一波语言的操作符。 ...

    snowell 评论0 收藏0
  • 一眼看穿

    摘要:,返回对象的字符串表示。布尔操作符逻辑非号表示返回一个布尔值,可以应用于中的任何值规则如果操作数是一个对象,返回如果操作数是一个空字符串,返回如果操作数是一个非空字符串,返回如果操作数是数值,返回如果操作数是任 前段时间忙,好久没更新了,继续梳理基础知识这期总结的是JS的基本概念 标识符 所谓的标识符是指变量,函数属性的名字,或者函数的参数 第一个字符必须是一个字母,下划线(_)或者一...

    jsdt 评论0 收藏0
  • Javascript:数据类型与操作

    数据类型 1.Undefined 表示变量已声明,但未被初始化。需要注意的是当使用typeof操作符判断数据类型时,未被声明的变量和未初始化的变量返回的值都为undefined var message; console.log(typeof message);//undefined console.log(typeof age);//undefined 2.null:表示一个空对象指针 使用ty...

    Leck1e 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<