摘要:對的配置和行為進行定制修改匹配路由請求規則注冊自定義的和添加靜態資源處理器添加自定義視圖控制器添加自定義方法參數處理器配置消息轉換器清空所有轉換器做一個好人。博客園掘金簡書頭條知乎
一個大的系統,在代碼的復用肯定是必不可少的,它能解決:
統一的響應處理(可以對外提供統一的響應對象包裝)
統一的異常處理(可以將業務異常統一收集處理)
通用代碼定義、配置定義(通用的配置信息放在統一的代碼管理中,便于維護和更新)
創建項目 mscx-ad-commonPOM文件
項目結構mscx-ad com.sxzhongf 1.0-SNAPSHOT ../pom.xml 4.0.0 jar com.sxzhongf mscx-ad-common 1.0-SNAPSHOT Common-Service 公共邏輯 and 幫助類 org.springframework.boot spring-boot-starter-web com.alibaba fastjson 1.2.58 commons-codec commons-codec org.apache.commons commons-lang3 org.springframework.boot spring-boot-maven-plugin
vo (統一響應對象package)
advice (bean 增強package )
Spring支持五種類型的增強或通知(Advice)
Before(方法執行前) org.apringframework.aop.MethodBeforeAdvice
AfterReturning(方法返回后) org.springframework.aop.AfterReturningAdvice
After-throwing(異常拋出后) org.springframework.aop.ThrowsAdviceArround環繞,即方法前后 org.aopaliance.intercept.MethodInterceptor
引介,不常用 org.springframework.aop.IntroductionInterceptor具體可參考:細說advice,advisor
annotation
config
exception
utils
export
創建通用返回對象
/** * @Data是下屬注解的組合注解 * * @see Getter * @see Setter * @see RequiredArgsConstructor * @see ToString * @see EqualsAndHashCode * @see lombok.Value */ @Data @NoArgsConstructor //無參構造函數 @AllArgsConstructor //全參構造函數 public class CommonResponseimplements Serializable { private Integer code = 0; private String message = "success"; /** * 具體的數據對象信息 */ private T data; public CommonResponse(Integer code, String message) { this.code = code; this.message = message; } public CommonResponse(T data) { this.data = data; } }
在advice包中實現對響應的統一攔截com.sxzhongf.ad.common.advice.CommonResponseDataAdvice,參考 ResponseBodyAdvice, RestControllerAdvice 可查看源碼org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice
@RestControllerAdvice public class CommonResponseDataAdvice implements ResponseBodyAdvice
我們在annotation包下面添加一個注解com.sxzhongf.ad.common.annotation.IgnoreResponseAdvice,用它來標柱是否需要支持上面的統一返回攔截。
/** * IgnoreResponseAdvice for 標示需要忽略攔截動作 * * @author Isaac.Zhang */ //ElementType.TYPE 表示該注解可用于class //ElementType.METHOD 表示可用于方法 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface IgnoreResponseAdvice { }
異常處理也是統一的,那么同樣就要使用到RestControllerAdvice,同時,需要使用的Spring 的ExceptionHandler進行異常處理
創建統一異常攔截類
/** * GlobalExceptionAdvice for 全局統一異常攔截 * * @author Isaac.Zhang * @see RestControllerAdvice * @see ExceptionHandler */ @RestControllerAdvice public class GlobalExceptionAdvice { /** * 對 {@link AdException} 進行統一處理 * {@link ExceptionHandler} 對指定的異常進行攔截 * 可優化: * 定義多種類異常,實現對應的異常處理, * 例如: *
2.創建通用異常類
/** * AdException for 統一異常處理類 * * @author Isaac.Zhang */ public class AdException extends Exception { public AdException(String message) { super(message); } }
通過HTTP消息轉換器HttpMessageConverter,實現對象轉換,Java Object -> HTTP 數據流
新增WebConfiguration,我們通過實現org.springframework.web.servlet.config.annotation.WebMvcConfigurer來定制和修改Spring MVC的配置信息。
/** * WebConfiguration for 對Spring的配置和行為進行定制修改 * * @author Isaac.Zhang * @see WebMvcConfigurer */ @Configuration public class WebConfiguration implements WebMvcConfigurer { /** * 匹配路由請求規則 */ @Override public void configurePathMatch(PathMatchConfigurer configurer) { } /** * 注冊自定義的Formatter 和 Convert */ @Override public void addFormatters(FormatterRegistry registry) { } /** * 添加靜態資源處理器 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { } /** * 添加自定義視圖控制器 */ @Override public void addViewControllers(ViewControllerRegistry registry) { } /** * 添加自定義方法參數處理器 */ @Override public void addArgumentResolvers(List做一個好人。resolvers) { } /** * 配置消息轉換器 */ @Override public void configureMessageConverters(List > converters) { //清空所有轉換器 converters.clear(); // Java Obj -> Json Obj (http header: application/json) converters.add(new MappingJackson2HttpMessageConverter()); } }
博客園 | segmentfault | spring4all | csdn | 掘金 | OSChina | 簡書 | 頭條 | 知乎 | 51CTO
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75604.html
摘要:在前面的過程中,我們創建了個服務發現我們使用作為服務發現組件,學習了的使用。加依賴加注解改配置使用項目三部曲,我們可以快速添加一個新組件,并正常使用這個我沒有在項目中實現,但是大家可以和一樣,三部曲搞定。 在前面的過程中,我們創建了4個project: 服務發現 我們使用Eureka 作為服務發現組件,學習了Eureka Server,Eureka Client的使用。 Eureka...
摘要:索引設計介紹在我們廣告系統中,為了我們能更快的拿到我們想要的廣告數據,我們需要對廣告數據添加類似于數據庫一樣的索引結構,分兩大類正向索引和倒排索引。如何在廣告系統中使用倒排索引核心用途是對各個維度限制的整理。 索引設計介紹 在我們廣告系統中,為了我們能更快的拿到我們想要的廣告數據,我們需要對廣告數據添加類似于數據庫index一樣的索引結構,分兩大類:正向索引和倒排索引。 正向索引 通過...
摘要:各個表數據的存儲文件名定義索引對象導出的字段信息依然用為例。通用處理索引類索引之間存在層級劃分,也就是相互之間擁有依賴關系的劃分加載全量索引其實是增量索引添加的一種特殊實現若初實現廣告推廣計劃的第二層級索引實現。 上一節我們實現了索引基本操作的類以及索引緩存工具類,本小節我們開始實現加載全量索引數據,在加載全量索引數據之前,我們需要先將數據庫中的表數據導出到一份文件中。Lets cod...
摘要:所以,沒必要過分糾結這種信息,咬文嚼字有時候反而會適得其反。若初通用錯誤信息異常類請求參數異常用戶已存在用戶不存在在下面創建一個工具類用來對用戶進行加密來獲取信息。工具類若初加密參考創建用戶的實現,依次實現其他表操作。 DAO層設計實現 這里我們使用Spring DATA JPA來實現數據庫操作,當然大家也可以使用Mybatis,都是一樣的,我們依然以用戶表操作為例: /** * A...
摘要:工作流程項目依賴監控面板引入服務調用的組件依賴引入服務消費者的依賴數據庫鏈接依賴工具類集合類操作日志監聽解析開源工具類庫中的配置相關依賴圖片壓縮 工作流程 showImg(https://i.loli.net/2019/07/29/5d3ee1829df4d57461.png); 項目依賴 org.springframewo...
閱讀 3548·2021-08-31 09:39
閱讀 1854·2019-08-30 13:14
閱讀 2919·2019-08-30 13:02
閱讀 2769·2019-08-29 13:22
閱讀 2341·2019-08-26 13:54
閱讀 767·2019-08-26 13:45
閱讀 1586·2019-08-26 11:00
閱讀 982·2019-08-26 10:58