日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Spring MVC核心擴(kuò)展點(diǎn)及使用技巧總結(jié)和使用案例

來源: 責(zé)編: 時間:2024-02-01 12:46:37 256觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.121. 啟用Spring MVC功能@Configuration@EnableWebMvcpublic class WebConfig {}2. 類型轉(zhuǎn)換配置如需要自定義數(shù)據(jù)類型的轉(zhuǎn)換,可以通過如下方式注冊@Configurationpublic class WebConfig implement

環(huán)境:SpringBoot2.7.12kP428資訊網(wǎng)——每日最新資訊28at.com

1. 啟用Spring MVC功能

@Configuration@EnableWebMvcpublic class WebConfig {}

kP428資訊網(wǎng)——每日最新資訊28at.com

2. 類型轉(zhuǎn)換配置

如需要自定義數(shù)據(jù)類型的轉(zhuǎn)換,可以通過如下方式注冊kP428資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {    @Override  public void addFormatters(FormatterRegistry registry) {    registry.addConverterFactory(new ConverterFactory<String, Number>() {      @Override      public <T extends Number> Converter<String, T> getConverter(Class<T> targetType) {        return new Converter<String, T>() {          public T convert(String source) {            return (T) Integer.valueOf(source) ;          }        } ;      }    });  }  }

kP428資訊網(wǎng)——每日最新資訊28at.com

以上添加了從String到Integer的轉(zhuǎn)換(這里只是舉例,系統(tǒng)默認(rèn)已經(jīng)有了從String到Number的轉(zhuǎn)換器)。每種轉(zhuǎn)換器最終被包裝成ConvertersForPair對象,該對象中有個隊(duì)列保存了所有的轉(zhuǎn)換器。后添加的添加到首位,如下:kP428資訊網(wǎng)——每日最新資訊28at.com

private static class ConvertersForPair {    private final Deque<GenericConverter> converters = new ConcurrentLinkedDeque<>();    public void add(GenericConverter converter) {      this.converters.addFirst(converter);    }}

kP428資訊網(wǎng)——每日最新資訊28at.com

所有如你有自定義的轉(zhuǎn)換器,自定義的優(yōu)先級比系統(tǒng)自帶的要高。kP428資訊網(wǎng)——每日最新資訊28at.com

3. 數(shù)據(jù)驗(yàn)證

默認(rèn)情況下,如果類路徑上存在 Bean Validation(例如 Hibernate Validator),則 LocalValidatorFactoryBean 會被注冊為全局 Validator,與控制器方法參數(shù)上的 @Valid 和 Validated 一起使用。kP428資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {  public Validator getValidator() {    return new LocalValidatorFactoryBean();  }}

kP428資訊網(wǎng)——每日最新資訊28at.com

4. 請求攔截器kP428資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {  public void addInterceptors(InterceptorRegistry registry) {    registry.addInterceptor(new HandlerInterceptor() {      @Override      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)          throws Exception {        if (request.getHeader("token") == null) {          return false ;        }        return true ;      }    }).addPathPatterns("/**") ;  }}

kP428資訊網(wǎng)——每日最新資訊28at.com

上面配置了一個攔截任意請求的攔截器,在請求到達(dá)時會先驗(yàn)證請求header中token是否為null。kP428資訊網(wǎng)——每日最新資訊28at.com

kP428資訊網(wǎng)——每日最新資訊28at.com

攔截器并不適合作為安全層,因?yàn)樗锌赡芘c控制器Controller路徑匹配不匹配,而Controller路徑匹配還可以透明地匹配尾部斜線和路徑擴(kuò)展名以及其他路徑匹配選項(xiàng)。其中許多選項(xiàng)已被棄用,但仍有可能出現(xiàn)不匹配。一般情況下,我們建議使用 Spring Security,它包含一個專用的 MvcRequestMatcher,可與 Spring MVC 路徑匹配保持一致,還具有安全防火墻,可阻止 URL 路徑中許多不需要的字符。kP428資訊網(wǎng)——每日最新資訊28at.com

kP428資訊網(wǎng)——每日最新資訊28at.com

5. 請求內(nèi)容類型

自定義Spring MVC 如何從請求中確定所請求的媒體類型(例如,接受頭、URL 路徑擴(kuò)展、查詢參數(shù)等)。kP428資訊網(wǎng)——每日最新資訊28at.com

默認(rèn)情況下,只選中"Accept" header。kP428資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic class WebConfig implements WebMvcConfigurer {  @Override  public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {    // 這樣配置后,視圖技術(shù)就能夠根據(jù)你請求的Accept輸出指定的文件內(nèi)容了    configurer.mediaType("yaml", new MediaType("application", "yaml")) ;  }}

上面的配置最終是對ContentNegotiationManager對象進(jìn)行添加MappingMediaTypeFileExtensionResolver文件擴(kuò)展解析器。kP428資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic ContentNegotiationManager mvcContentNegotiationManager() {  if (this.contentNegotiationManager == null) {    ContentNegotiationConfigurer configurer = new ContentNegotiationConfigurer(this.servletContext);    configurer.mediaTypes(getDefaultMediaTypes());    configureContentNegotiation(configurer);    this.contentNegotiationManager = configurer.buildContentNegotiationManager();  }  return this.contentNegotiationManager;}protected ContentNegotiationManager buildContentNegotiationManager() {  this.factory.addMediaTypes(this.mediaTypes);  return this.factory.build();}

部分代碼kP428資訊網(wǎng)——每日最新資訊28at.com

public class ContentNegotiationManagerFactoryBean {  public ContentNegotiationManager build() {    if (!CollectionUtils.isEmpty(this.mediaTypes) && !this.favorPathExtension && !this.favorParameter) {      this.contentNegotiationManager.addFileExtensionResolvers(          new MappingMediaTypeFileExtensionResolver(this.mediaTypes));    }  }}

有了MappingMediaTypeFileExtensionResolver解析器后,還需要Controller接口返回ModelAndView對象。如下接口kP428資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/contentType")public ModelAndView contentType() {  return new ModelAndView("test") ;}

kP428資訊網(wǎng)——每日最新資訊28at.com

在classpath下新建test.yaml文件,內(nèi)容隨意。有了這些還不夠,我們需要能夠解析處理*.yaml的文件。所以還需要視圖解析器kP428資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class YamlViewResolver implements ViewResolver {  @Override  public View resolveViewName(String viewName, Locale locale) throws Exception {    if (!viewName.endsWith(".yaml")) {      return null ;    }    return new View() {      // 支持的類型      public String getContentType() {        return "application/yaml" ;      };      @Override      public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {        ClassPathResource resource = new ClassPathResource(viewName) ;        InputStream is = resource.getInputStream() ;                OutputStream outputStream = response.getOutputStream();          byte[] buffer = new byte[4096];          int bytesRead = -1;          while ((bytesRead = is.read(buffer)) != -1) {            outputStream.write(buffer, 0, bytesRead);          }          outputStream.flush() ;          is.close();          outputStream.close() ;      }    } ;  }}

有了這些我們配置Spring MVC才能正確的輸出我們所需要的文件內(nèi)容。這個功能是不是太麻煩了,沒撒用

本文鏈接:http://m.www897cc.com/showinfo-26-70401-0.htmlSpring MVC核心擴(kuò)展點(diǎn)及使用技巧總結(jié)和使用案例

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 項(xiàng)目明明部署成功了, BUG 怎么還在啊?產(chǎn)品急了

下一篇: 別瞎寫工具類了,Spring自帶的不香嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 從 Pulsar Client 的原理到它的監(jiān)控面板

    背景前段時間業(yè)務(wù)團(tuán)隊(duì)偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費(fèi)了、生產(chǎn)者消息發(fā)送緩慢等各種問題。雖然我們有個監(jiān)控頁面可以根據(jù) topic 維度查看他的發(fā)送狀態(tài),
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(消息堆積)、消費(fèi) 三大塊領(lǐng)域。那接下來,我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過程。注意,如果白話中不小心提到相關(guān)代
  • 共享單車的故事講到哪了?

    來源丨海克財(cái)經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點(diǎn)新聞關(guān)照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發(fā)報道稱,成都、天津、鄭州等地多個共享單
  • 中國家電海外掘金正當(dāng)時|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 華為開發(fā)者大會2023日程公開:開設(shè)鴻蒙HarmonyOS 4體驗(yàn)區(qū)

    IT之家 7 月 31 日消息,華為今日公布了 HDC.Together 開發(fā)者大會 2023 的詳細(xì)日程。整場大會將于 8 月 4 日-6 日之間舉行,屆時將發(fā)布最新一代鴻蒙 H
  • 蘋果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報道,當(dāng)蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機(jī)型的盒子里,也支
  • 與兆芯合作 聯(lián)想推出全新旗艦版筆記本電腦開天N7系列

    聯(lián)想與兆芯合作推出全新聯(lián)想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構(gòu),16nm 工藝,4 核 4 線
  • 華為舉行春季智慧辦公新品發(fā)布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發(fā)布會,在海外市場推出之前已經(jīng)在中國市場上市的筆記本、平板、激光打印機(jī)等辦公產(chǎn)品,并首次推出搭載
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品久久久久久久午夜片| 久久久亚洲成人| 99xxxx成人网| 亚洲视频一区二区免费在线观看| 欧美午夜寂寞影院| 欧美精品二区| 亚洲乱码日产精品bd| 免费成人激情视频| 欧美久久久久久久久久| 国产精品多人| 黑人巨大精品欧美一区二区| 亚洲日韩成人| 欧美亚洲一级片| 欧美成人a∨高清免费观看| 欧美色播在线播放| 国内揄拍国内精品少妇国语| 亚洲人成在线影院| 午夜激情久久久| 欧美成人在线网站| 国产免费成人av| 亚洲精品乱码久久久久| 午夜久久99| 欧美激情中文字幕在线| 国产精品久久久久9999高清| 在线观看日韩av| 亚洲男人的天堂在线观看| 免费久久99精品国产自在现线| 国产精品久久久爽爽爽麻豆色哟哟 | 国产区二精品视| 亚洲精品国产精品国产自| 欧美在线观看你懂的| 日韩一级免费| 国产一区三区三区| 免费欧美在线| 欧美日韩国产一级片| 国产一区二区三区电影在线观看| 亚洲精品乱码久久久久久久久| 欧美在线资源| 欧美色道久久88综合亚洲精品| 狠狠综合久久av一区二区老牛| 一区二区三区久久精品| 久久久久久久精| 久久久国际精品| 精品1区2区3区4区| 亚洲国产日韩美| 国产欧美一区二区三区沐欲| 久久久精品999| 国产日产欧产精品推荐色| 亚洲欧洲久久| 久久久午夜精品| 国产九九视频一区二区三区| 精品99一区二区三区| 亚洲欧洲一区二区在线播放| 亚洲激情啪啪| 亚洲一区二区视频在线| 亚洲欧洲精品一区二区三区波多野1战4 | 在线观看欧美亚洲| 亚洲国产婷婷综合在线精品| 欧美日产国产成人免费图片| 亚洲精品美女在线观看| 国产女人精品视频| 久久蜜桃香蕉精品一区二区三区| 国产精品二区在线| 狂野欧美一区| 宅男噜噜噜66一区二区66| 久久综合伊人| 欧美精品一区二区蜜臀亚洲| 国产精品免费电影| 欧美日韩一区二区三区视频| 日韩视频免费观看高清在线视频 | 亚洲国产成人av在线| 亚洲高清视频在线观看| 亚洲日本理论电影| 国产视频在线观看一区| 久热这里只精品99re8久| 欧美日韩国产一区二区| 亚洲黄网站黄| 欧美成人精品影院| 影音先锋中文字幕一区| 欧美一区二区三区在| 国产精品捆绑调教| 亚洲永久精品大片| 国产精品a久久久久久| 99国产精品| 欧美色播在线播放| 亚洲特级毛片| 欧美色一级片| 亚洲桃色在线一区| 欧美视频中文在线看| 一区二区三区四区五区在线 | 欧美精品一区视频| 在线观看视频一区| 午夜老司机精品| 最新亚洲视频| 国产精品私拍pans大尺度在线| 亚洲电影在线免费观看| 亚洲精品久久久久久久久久久| av成人免费在线| 久久精品国产999大香线蕉| 久久狠狠亚洲综合| 国产主播一区| 另类成人小视频在线| 在线观看日韩专区| 欧美国产在线观看| 99精品福利视频| 国产精品99免费看 | 亚洲欧美激情一区| 国产日韩综合一区二区性色av| 久久精品一区二区三区不卡牛牛| 在线观看欧美一区| 欧美精品一区在线发布| 亚洲午夜在线观看视频在线| 欧美一区二区三区免费视频| 99精品黄色片免费大全| 欧美日韩亚洲一区二区三区在线| 亚洲精品偷拍| 欧美色网一区二区| 91久久香蕉国产日韩欧美9色| 久久精品欧美日韩| 亚洲一区免费在线观看| 国产精品久久久久久久久久久久久久 | 欧美视频网址| 午夜在线精品偷拍| 伊人久久噜噜噜躁狠狠躁 | 国产欧美精品一区二区三区介绍 | 国产精品大片| 久久精品国产2020观看福利| 91久久极品少妇xxxxⅹ软件| 国产精品久久国产愉拍| 欧美有码在线观看视频| 亚洲国产清纯| 国产精品系列在线播放| 浪潮色综合久久天堂| 一区二区三区欧美视频| 国产农村妇女精品| 欧美肥婆在线| 午夜精品久久久久久99热软件| 在线观看三级视频欧美| 亚洲乱码国产乱码精品精98午夜| 久久久视频精品| 一本色道久久99精品综合| 国产亚洲精品激情久久| 欧美精品麻豆| 久久精品人人做人人爽| 99精品久久| 欲香欲色天天天综合和网| 国产精品v欧美精品v日本精品动漫| 久久久久久久91| 中文一区字幕| 亚洲成在线观看| 国产精品永久免费观看| 欧美理论视频| 久久天堂av综合合色| 亚洲影院污污.| 亚洲韩国一区二区三区| 国产婷婷色一区二区三区在线| 欧美日韩国产另类不卡| 久久精品主播| 亚洲欧美精品在线观看| 日韩视频在线一区二区| 一区二区亚洲欧洲国产日韩| 国产精品国产a级| 精品1区2区3区4区| 欧美日韩免费在线视频| 欧美成人69av| 久久精品视频在线看| 亚洲一区二区三区在线看| 亚洲人成久久| 樱桃国产成人精品视频| 国产欧美日韩另类一区| 欧美特黄一级大片| 欧美久久久久久| 免费国产一区二区| 久久蜜桃香蕉精品一区二区三区| 午夜在线精品偷拍| 亚洲欧美另类在线观看| 一区二区三区回区在观看免费视频| 亚洲国产精品久久久久婷婷884| 国内精品福利| 国产日产精品一区二区三区四区的观看方式| 欧美日韩国产成人在线91| 欧美不卡在线视频| 可以看av的网站久久看| 欧美在线啊v| 午夜精品福利一区二区蜜股av| 亚洲无线视频| 一区二区三欧美| 99精品欧美一区二区蜜桃免费| 亚洲精品社区| 亚洲美女在线观看| 亚洲人成网站在线播| 亚洲国产精品久久久久秋霞影院| 在线看视频不卡| 伊人成人开心激情综合网| 国一区二区在线观看| 韩国女主播一区| 狠狠综合久久av一区二区小说| 国产曰批免费观看久久久| 国产一区二区三区电影在线观看| 国产欧美一区二区精品性色| 国产美女搞久久| 国产日产亚洲精品系列| 国产一区日韩一区| 黄色成人av网|