成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mpaas-springboot-base操作手冊(cè)

陳江龍 / 910人閱讀

摘要:介紹是得帆公司開(kāi)發(fā)幫助開(kāi)發(fā)者開(kāi)發(fā)更規(guī)范更健壯的程序安裝目前沒(méi)有提交至中央倉(cāng)庫(kù)后續(xù)會(huì)提交到倉(cāng)庫(kù)目前只能采用本地安裝方式安裝前確認(rèn)是否本地已安裝執(zhí)行以下命令行如能正常執(zhí)行即可下載包執(zhí)行以下命令將包安裝至本地倉(cāng)庫(kù)

介紹

mpaas-springboot-base是得帆公司開(kāi)發(fā),幫助開(kāi)發(fā)者開(kāi)發(fā)更規(guī)范更健壯的spring boot程序

安裝

目前沒(méi)有提交至maven中央倉(cāng)庫(kù),后續(xù)會(huì)提交到maven倉(cāng)庫(kù).目前只能采用本地安裝方式,安裝前確認(rèn)是否本地已安裝maven.執(zhí)行以下命令行,如能正常執(zhí)行即可.

$ 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包,執(zhí)行以下命令將jar包安裝至本地倉(cāng)庫(kù).

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

修改項(xiàng)目pom.xml文件,增加依賴


    com.definesys.mpaas
    mpaas-springboot-base
    1.0.0
使用 配置啟動(dòng)類

修改啟動(dòng)類xxxApplication.java增加以下注解

@ComponentScan(basePackages = {"com.definesys.mpaas.common","啟動(dòng)類所在的包路徑"})

spring boot默認(rèn)掃描啟動(dòng)類所在的package下的類,要手動(dòng)增加注解才能讓spring boot掃描到mpaas-springboot-base.比如啟動(dòng)類全路徑為com.definesys.demo.DemoApplication那么注解應(yīng)該寫成以下格式

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

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

接口返回

所有的controller返回值統(tǒng)一為com.definesys.mpaas.common.http.Response該類定義了一套標(biāo)準(zhǔn)返回格式和相關(guān)api

Response字段
    private String code = CODE_OK;  //操作結(jié)果編碼 ok/error
    private String message;         //記錄錯(cuò)誤信息或者需要提示給用戶的信息
    private Long total;             //記錄總數(shù)
    private Object data;            //非列表數(shù)據(jù)
    private List table;     //列表數(shù)據(jù)
    private String requestid;       //請(qǐng)求uuid
    
    public static final String CODE_OK = "ok";
    public static final String CODE_ERR = "error";

規(guī)定如果是系統(tǒng)錯(cuò)誤,如程序異常,空指針等,以http status形式返回500錯(cuò)誤.程序應(yīng)該返回一個(gè)code=error的并且http code=500的Response,但如果放在業(yè)務(wù)代碼里處理不僅繁瑣也容易忽略掉異常,導(dǎo)致有漏網(wǎng)之魚(yú).mpaas也提供了更為簡(jiǎn)便的方案,下面會(huì)提到.

從返回的數(shù)據(jù)類型來(lái)看,抽象出列表非列表兩種數(shù)據(jù),這邊放到兩個(gè)字段里,列表數(shù)據(jù)放到table非列表數(shù)據(jù)防到data

Response-Api:返回成功

1. 只返回code沒(méi)有數(shù)據(jù)

Response ok=Response.ok();

輸出

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

ps:每次請(qǐng)求服務(wù)器返回Response都會(huì)帶一個(gè)唯一的requestid,該requestid可作為日志追蹤業(yè)務(wù)查詢等

2. 返回非列表數(shù)據(jù)

//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"
}

如果返回的數(shù)據(jù)都是key-value形式,也可以寫成如下形式

Response ok = Response.ok().set("user", "asan")
                .set("company", "definesys")
                .set("email","[email protected]");

3. 返回列表數(shù)據(jù)

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. 返回錯(cuò)誤

Response ok = Response.error("系統(tǒng)出錯(cuò)");

輸出

{
    "code": "error",
    "message": "系統(tǒng)出錯(cuò)",
    "requestid": "a491589ed2b04fe1b1a7e4c73c29178e"
}
異常處理

這里將異常分為兩類

運(yùn)行時(shí)異常:指因?yàn)槌绦騜ug或者系統(tǒng)問(wèn)題導(dǎo)致接口調(diào)用失敗,屬于不可預(yù)料異常

業(yè)務(wù)異常: 指業(yè)務(wù)數(shù)據(jù)不符合要求接口本身拋出異常

mpass也分別提供兩個(gè)類MpaasRuntimeExceptionMpaasBusinessException對(duì)應(yīng)運(yùn)行時(shí)異常業(yè)務(wù)異常

下面以一個(gè)例子說(shuō)明說(shuō)明這兩個(gè)異常使用方法

測(cè)試接口

@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("數(shù)據(jù)不合法請(qǐng)輸入一個(gè)大于10的數(shù)字");
        }
        return Response.ok();
    }

RuntimeException(運(yùn)行時(shí)異常)

$ 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": "系統(tǒng)出錯(cuò)請(qǐng)聯(lián)系管理員",
    "requestid": "f8beb8c1e817414ba0b2e856f22b0b4d"
}

BusinessException(業(yè)務(wù)異常)

$ 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": "數(shù)據(jù)不合法請(qǐng)輸入一個(gè)大于10的數(shù)字",
    "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"
}

在開(kāi)發(fā)時(shí),希望后臺(tái)能夠返回完整錯(cuò)誤棧這樣方便后臺(tái)人員排查問(wèn)題,可以在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)

    ....
}

如果是運(yùn)行時(shí)錯(cuò)誤系統(tǒng)默認(rèn)返回的錯(cuò)誤信息為系統(tǒng)出錯(cuò)請(qǐng)聯(lián)系管理員如果想更改該信息,可以在application.properties加入以下配置

spring.mpaas.mode=PROD
spring.mpaas.errormsg=提示信息的unnicode編碼

如果是中文需要轉(zhuǎn)成unicode編碼,可以在http://tool.chinaz.com/tools/unicode.aspx這里進(jìn)行轉(zhuǎn)碼.如想更改為系統(tǒng)出錯(cuò)請(qǐng)稍后再試轉(zhuǎn)碼之后配置

spring.mpaas.mode=PROD
spring.mpaas.errormsg=u7cfbu7edfu51fau9519u8bf7u7a0du540eu518du8bd5
$curl http://localhost:8080/testException?data=a
{
    "code": "error",
    "message": "系統(tǒng)出錯(cuò)請(qǐng)聯(lián)系管理員",
    "requestid": "27c5ead8fa4a49e1b5cd44cc55ce130e"
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76859.html

相關(guān)文章

  • javascript操作符知識(shí)點(diǎn)整理

    摘要:中的操作符的不同之處在于,它們能夠適用于很多值,例如字符串?dāng)?shù)字值布爾值甚至對(duì)象。在應(yīng)用于布爾值時(shí),先將其轉(zhuǎn)換為再執(zhí)行加減的操作。布爾值變量變?yōu)閿?shù)值變量。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值。 前言 初學(xué)者會(huì)覺(jué)得操作符的知識(shí)很簡(jiǎn)單,但是隨著學(xué)習(xí)的深入會(huì)發(fā)現(xiàn)很多語(yǔ)句都可以用操作符來(lái)簡(jiǎn)化,所以深入理解操作符可以幫助你寫出高性能的代碼。這篇文章主要記錄不同操作符所遵循...

    JerryZou 評(píng)論0 收藏0
  • C語(yǔ)言基礎(chǔ)之操作符詳解

    摘要:語(yǔ)言基礎(chǔ)之操作符詳解操作符的分類算術(shù)操作符移位操作符位操作符邏輯操作符逗號(hào)表達(dá)式表達(dá)式求值隱式類型轉(zhuǎn)換算術(shù)轉(zhuǎn)換操作符的屬性今天就帶各位大佬來(lái)了解一波語(yǔ)言的操作符。 ...

    snowell 評(píng)論0 收藏0
  • 一眼看穿

    摘要:,返回對(duì)象的字符串表示。布爾操作符邏輯非號(hào)表示返回一個(gè)布爾值,可以應(yīng)用于中的任何值規(guī)則如果操作數(shù)是一個(gè)對(duì)象,返回如果操作數(shù)是一個(gè)空字符串,返回如果操作數(shù)是一個(gè)非空字符串,返回如果操作數(shù)是數(shù)值,返回如果操作數(shù)是任 前段時(shí)間忙,好久沒(méi)更新了,繼續(xù)梳理基礎(chǔ)知識(shí)這期總結(jié)的是JS的基本概念 標(biāo)識(shí)符 所謂的標(biāo)識(shí)符是指變量,函數(shù)屬性的名字,或者函數(shù)的參數(shù) 第一個(gè)字符必須是一個(gè)字母,下劃線(_)或者一...

    jsdt 評(píng)論0 收藏0
  • Javascript:數(shù)據(jù)類型與操作

    數(shù)據(jù)類型 1.Undefined 表示變量已聲明,但未被初始化。需要注意的是當(dāng)使用typeof操作符判斷數(shù)據(jù)類型時(shí),未被聲明的變量和未初始化的變量返回的值都為undefined var message; console.log(typeof message);//undefined console.log(typeof age);//undefined 2.null:表示一個(gè)空對(duì)象指針 使用ty...

    Leck1e 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<