Spring Boot 定制URL匹配規則的方法


事情的起源:有人問我,說編寫了一個/hello訪問路徑,但是吧,不管是輸入/hello還是/hello.html,還是/hello.xxx都能進行訪問。當時我還以為他對代碼進行處理了,后來發現不是,后來發現這是Spring Boot路由規則。好了,有廢話了下,那么看看我們解決上面這個導致的問題。

構建web應用程序時,並不是所有的URL請求都遵循默認的規則。有時,我們希望RESTful URL匹配的時候包含定界符“.”,這種情況在Spring中可以稱之為“定界符定義的格式”;有時,我們希望識別斜杠的存在。Spring提供了接口供開發人員按照需求定制。

核心的開發步驟就是兩步:

(1)啟動類 extends WebMvcConfigurationSupport

(2)重寫configurePathMatch方法;

具體實現代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.kfit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  
/**
  *
  * @author Angel --守護天使
  * @version v.0.1
  * @date 2016年7月29日下午7:06:11
  */
@SpringBootApplication
public class ApiCoreApp extends WebMvcConfigurationSupport{
   
   
   /**
    * 1、 extends WebMvcConfigurationSupport
    * 2、重寫下面方法;
    * setUseSuffixPatternMatch : 設置是否是后綴模式匹配,如“/user”是否匹配/user.*,默認真即匹配;
    * setUseTrailingSlashMatch : 設置是否自動后綴路徑模式匹配,如“/user”是否匹配“/user/”,默認真即匹配;
    */
   @Override
   publicvoid configurePathMatch(PathMatchConfigurer configurer) {
     configurer.setUseSuffixPatternMatch( false )
           .setUseTrailingSlashMatch( true );
   }
   
   publicstaticvoid main(String[] args) {
     SpringApplication.run(ApiCoreApp. class , args);
   }
}

其中訪問代碼:

?
1
2
3
4
@RequestMapping ( "/user" )
public String hello(){
   return "/user" ;
}

以上代碼有兩句核心的代碼:

setUseSuffixPatternMatch(boolean useSuffixPatternMatch):

設置是否是后綴模式匹配,如“/user”是否匹配/user.*,默認真即匹配;

當此參數設置為true的時候,那么/user.html,/user.aa,/user.*都能是正常訪問的。

當此參數設置為false的時候,那么只能訪問/user或者/user/( 這個前提是setUseTrailingSlashMatch 設置為true了)。

setUseTrailingSlashMatch (boolean useSuffixPatternMatch):

設置是否自動后綴路徑模式匹配,如“/user”是否匹配“/user/”,默認真即匹配;

當此參數設置為true的會后,那么地址/user,/user/都能正常訪問。

當此參數設置為false的時候,那么就只能訪問/user了。

當以上兩個參數都設置為true的時候,那么路徑/user或者/user.aa,/user.*,/user/都是能正常訪問的,但是類似/user.html/ 是無法訪問的。

當都設置為false的時候,那么就只能訪問/user路徑了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

原文鏈接:http://412887952-qq-com.iteye.com/blog/2315107

http://www.jb51.net/article/106715.htm

其中DefaultMockMvcBuilder還提供了如下API:

addFilters(Filter... filters)/addFilter(Filter filter, String... urlPatterns):添加javax.servlet.Filter過濾器

defaultRequest(RequestBuilder requestBuilder):默認的RequestBuilder,每次執行時會合並到自定義的RequestBuilder中,即提供公共請求數據的;

alwaysExpect(ResultMatcher resultMatcher):定義全局的結果驗證器,即每次執行請求時都進行驗證的規則;

alwaysDo(ResultHandler resultHandler):定義全局結果處理器,即每次請求時都進行結果處理;

dispatchOptions:DispatcherServlet是否分發OPTIONS請求方法到控制器;

 

StandaloneMockMvcBuilder繼承了DefaultMockMvcBuilder,又提供了如下API:

setMessageConverters(HttpMessageConverter<?>...messageConverters):設置HTTP消息轉換器;

setValidator(Validator validator):設置驗證器;

setConversionService(FormattingConversionService conversionService):設置轉換服務;

addInterceptors(HandlerInterceptor... interceptors)/addMappedInterceptors(String[] pathPatterns, HandlerInterceptor... interceptors):添加spring mvc攔截器;

setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager):設置內容協商管理器;

setAsyncRequestTimeout(long timeout):設置異步超時時間;

setCustomArgumentResolvers(HandlerMethodArgumentResolver... argumentResolvers):設置自定義控制器方法參數解析器;

setCustomReturnValueHandlers(HandlerMethodReturnValueHandler... handlers):設置自定義控制器方法返回值處理器;

setHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)/setHandlerExceptionResolvers(HandlerExceptionResolver... exceptionResolvers):設置異常解析器;

setViewResolvers(ViewResolver...resolvers):設置視圖解析器;

setSingleView(View view):設置單個視圖,即視圖解析時總是解析到這一個(僅適用於只有一個視圖的情況);

setLocaleResolver(LocaleResolver localeResolver):設置Local解析器;

setFlashMapManager(FlashMapManager flashMapManager):設置FlashMapManager,如存儲重定向數據;

setUseSuffixPatternMatch(boolean useSuffixPatternMatch):設置是否是后綴模式匹配,如“/user”是否匹配"/user.*",默認真即匹配;

setUseTrailingSlashPatternMatch(boolean useTrailingSlashPatternMatch):設置是否自動后綴路徑模式匹配,如“/user”是否匹配“/user/”,默認真即匹配;

addPlaceHolderValue(String name, String value) :添加request mapping中的占位符替代;

 

因為StandaloneMockMvcBuilder不會加載Spring MVC配置文件,因此就不會注冊我們需要的一些組件,因此就提供了如上API用於注冊我們需要的相應組件。

http://jinnianshilongnian.iteye.com/blog/2004660

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM