摘要:介紹是得帆公司開發幫助開發者開發更規范更健壯的程序安裝目前沒有提交至中央倉庫后續會提交到倉庫目前只能采用本地安裝方式安裝前確認是否本地已安裝執行以下命令行如能正常執行即可下載包執行以下命令將包安裝至本地倉庫
介紹
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
private String code = CODE_OK; //操作結果編碼 ok/error private String message; //記錄錯誤信息或者需要提示給用戶的信息 private Long total; //記錄總數 private Object data; //非列表數據 private List
規定如果是系統錯誤,如程序異常,空指針等,以http status形式返回500錯誤.程序應該返回一個code=error的并且http code=500的Response,但如果放在業務代碼里處理不僅繁瑣也容易忽略掉異常,導致有漏網之魚.mpaas也提供了更為簡便的方案,下面會提到.
從返回的數據類型來看,抽象出列表和非列表兩種數據,這邊放到兩個字段里,列表數據放到table非列表數據防到data
1. 只返回code沒有數據
Response ok=Response.ok();
輸出
{ "code": "ok", "requestid": "0f253675a20147d1b4b106404e4ed21d" }
ps:每次請求服務器返回Response都會帶一個唯一的requestid,該requestid可作為日志追蹤業務查詢等
2. 返回非列表數據
//Response ok=new Response() Response ok=Response.ok(); Mapdata=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也分別提供兩個類MpaasRuntimeException和MpaasBusinessException對應運行時異常和業務異常
下面以一個例子說明說明這兩個異常使用方法
測試接口
@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" }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76859.html
摘要:中的操作符的不同之處在于,它們能夠適用于很多值,例如字符串數字值布爾值甚至對象。在應用于布爾值時,先將其轉換為再執行加減的操作。布爾值變量變為數值變量。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值。 前言 初學者會覺得操作符的知識很簡單,但是隨著學習的深入會發現很多語句都可以用操作符來簡化,所以深入理解操作符可以幫助你寫出高性能的代碼。這篇文章主要記錄不同操作符所遵循...
摘要:語言基礎之操作符詳解操作符的分類算術操作符移位操作符位操作符邏輯操作符逗號表達式表達式求值隱式類型轉換算術轉換操作符的屬性今天就帶各位大佬來了解一波語言的操作符。 ...
數據類型 1.Undefined 表示變量已聲明,但未被初始化。需要注意的是當使用typeof操作符判斷數據類型時,未被聲明的變量和未初始化的變量返回的值都為undefined var message; console.log(typeof message);//undefined console.log(typeof age);//undefined 2.null:表示一個空對象指針 使用ty...
閱讀 630·2021-09-24 09:48
閱讀 2492·2021-08-26 14:14
閱讀 518·2019-08-30 13:08
閱讀 1445·2019-08-29 15:22
閱讀 3067·2019-08-29 11:06
閱讀 1001·2019-08-26 18:26
閱讀 1036·2019-08-26 13:53
閱讀 2514·2019-08-26 12:21