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