- N +

requestmapping注解作用(getmapping注解用法)

大家好,requestmapping注解作用相信很多的網(wǎng)友都不是很明白,包括getmapping注解用法也是一樣,不過(guò)沒(méi)有關(guān)系,接下來(lái)就來(lái)為大家分享關(guān)于requestmapping注解作用和getmapping注解用法的一些知識(shí)點(diǎn),大家可以關(guān)注收藏,免得下次來(lái)找不到哦,下面我們開(kāi)始吧!

springboot如何暴露接口給其他項(xiàng)目

可以通過(guò)以下步驟將SpringBoot接口暴露給其他項(xiàng)目:1.首先,在SpringBoot應(yīng)用程序中編寫(xiě)一個(gè)Controller類(lèi),該類(lèi)使用@RestController或@Controller注解進(jìn)行標(biāo)記。這將使該類(lèi)具有處理HTTP請(qǐng)求的能力。2.根據(jù)接口的功能,使用@RequestMapping等注解指定接口的URL路徑和HTTP請(qǐng)求方法。3.在方法體中編寫(xiě)業(yè)務(wù)邏輯代碼,實(shí)現(xiàn)接口的功能。4.如果需要獲取請(qǐng)求參數(shù),可以使用@RequestParam注解來(lái)綁定參數(shù)到方法的參數(shù)上。5.如果需要返回JSON格式的數(shù)據(jù),可以使用@ResponseBody注解來(lái)將方法返回值轉(zhuǎn)換為JSON格式。6.構(gòu)建和啟動(dòng)SpringBoot應(yīng)用程序,確保接口以及被暴露。7.在其他項(xiàng)目中,可以通過(guò)發(fā)送HTTP請(qǐng)求來(lái)訪問(wèn)和調(diào)用該接口,使用相關(guān)的工具、庫(kù)或框架來(lái)實(shí)現(xiàn)。總結(jié):SpringBoot可以通過(guò)編寫(xiě)Controller類(lèi),使用注解設(shè)置URL路徑和HTTP請(qǐng)求方法,然后使用相關(guān)的工具來(lái)訪問(wèn)和調(diào)用接口。這樣就可以將SpringBoot接口暴露給其他項(xiàng)目使用。

SpringBoot中,@Autowired和@Resource使用起來(lái)到底有什么區(qū)別

這個(gè)問(wèn)題也有一段時(shí)間了,當(dāng)初也就隨手一寫(xiě),直到最近還有網(wǎng)友在看,為了保證大家看的時(shí)候不會(huì)出現(xiàn)理解方面的問(wèn)題,于2021-5-10編輯一次,希望能更加嚴(yán)謹(jǐn)一點(diǎn),至少不會(huì)誤導(dǎo)大家。

首先,這個(gè)問(wèn)題有點(diǎn)不準(zhǔn)確,這2個(gè)注解是使用Spring框架過(guò)程中常用的注解,而SpringMVC和SpringBoot等框架都是基于Spring的進(jìn)階框架,并沒(méi)有對(duì)這2個(gè)注解的使用進(jìn)行修改或者調(diào)整,所以,只討論Spring框架如何處理這2個(gè)注解即可,而不是討論在SpringBoot中的使用區(qū)別。

【結(jié)論】在絕大部分情況下,使用這2個(gè)注解的任何一個(gè)都可以實(shí)現(xiàn)自動(dòng)裝配,在使用方面是無(wú)感的。

如果要討論區(qū)別,基本上就是2點(diǎn):

所屬不同:@Resource注解是javax包的;@Autowired是Spring聲明的;裝配機(jī)制不同:@Resource會(huì)優(yōu)先byName來(lái)裝配,即使名稱(chēng)不匹配,也會(huì)嘗試byType來(lái)裝配;@Autowired則是先查找匹配類(lèi)型對(duì)象的數(shù)量,如果有且僅有1個(gè),則直接裝配,如果為0個(gè),則無(wú)法裝配,此時(shí)需要考慮該注解的required屬性,默認(rèn)是true,就會(huì)因?yàn)椤氨仨氀b配卻沒(méi)有匹配類(lèi)型的對(duì)象”而拋出異常,如果顯式的設(shè)置為false,則不裝配,保持被自動(dòng)裝配的屬性為null值,如果匹配類(lèi)型的對(duì)象超過(guò)1個(gè),則會(huì)嘗試byName,如果成功,則裝配,如果失敗,則拋出異常。

如果一定要說(shuō)還有其它區(qū)別,可以是:

作用范圍不同:@Resource用于對(duì)字段、Setter方法進(jìn)行注解,@Autowired可用于構(gòu)造方法、Setter方法和字段;當(dāng)同一種類(lèi)型的對(duì)象有多個(gè)時(shí)(例如聲明的類(lèi)型是接口,在Spring容器中有2個(gè)或多個(gè)實(shí)現(xiàn)類(lèi)的對(duì)象),需要指定名稱(chēng),@Resource可直接配置name屬性來(lái)指定bean-name,而@Autowired需要配合@Qualifer注解,由@Qualifer注解來(lái)指定bean-name,當(dāng)用于字段時(shí),直接在字段的聲明之前使用這2個(gè)注解,當(dāng)用于Setter方法時(shí),在方法的聲明之前使用@Autowired,在方法的參數(shù)之前使用@Qualifer;

另外,還有很多關(guān)于使用@Autowired的細(xì)節(jié)問(wèn)題,例如“是不是不建議使用了”、“到底應(yīng)該怎么用”等等,所以,接下來(lái)主要討論這些問(wèn)題。

關(guān)于“是不是不建議使用了”,這種問(wèn)題的主要原因應(yīng)該是最近幾年IntelliJIDEA越來(lái)越流行了,而許多版本的IntelliJIDEA對(duì)@Autowired的預(yù)判是有問(wèn)題的!也就是說(shuō):IntelliJIDEA會(huì)在編碼期實(shí)時(shí)預(yù)判是否存在可以裝配的對(duì)象,如果它認(rèn)為沒(méi)有,就會(huì)報(bào)錯(cuò),事實(shí)上,它的判斷并不完全準(zhǔn)確!

例如,嘗試在Service組件中裝配一個(gè)Mapper接口類(lèi)型的字段時(shí):

(截圖來(lái)自IntelliJIDEA2020.1.4)

以上報(bào)錯(cuò)就是IntelliJIDEA預(yù)判錯(cuò)誤導(dǎo)致的,如果使用的是Eclipse就不會(huì)有這樣的問(wèn)題,解決方案可以是:

在UserMapper接口上添加@Repository注解;將以上代碼中的@Autowired配置為@Autowired(required=false),因?yàn)锧Autowired默認(rèn)是required=true,同時(shí)IntelliJIDEA認(rèn)為沒(méi)有可裝配對(duì)象,所以報(bào)錯(cuò),顯式的配置為required=false之后,即使IntelliJIDEA認(rèn)為沒(méi)有可裝配對(duì)象也不會(huì)報(bào)錯(cuò)了;將以上代碼中的@Autowired改為@Resource。

再例如在使用SpringSecurity進(jìn)行配置時(shí)也會(huì)有類(lèi)似的問(wèn)題,只不過(guò)這次它認(rèn)為“存在多個(gè)匹配類(lèi)型的對(duì)象”:

(截圖來(lái)自IntelliJIDEA2020.1.4)

解決以上報(bào)錯(cuò)信息的方式可以是:

將聲明的UserDetailsService接口類(lèi)型改為你的UserDetailsServiceImpl實(shí)現(xiàn)類(lèi)類(lèi)型,例如privateUserDetailsServerImplservice;即可;將以上代碼中的@Autowired改為@Resource。

由于許多類(lèi)似問(wèn)題都可以通過(guò)“將@Autowired改為@Resource”來(lái)解決,加上一些相關(guān)說(shuō)法(詳見(jiàn)下文),且某些片面的斷章取義,導(dǎo)致網(wǎng)上還存在“使用@Resource取代@Autowired”、“以后不要再用@Autowired”的說(shuō)法,而這些說(shuō)法都是錯(cuò)誤的,沒(méi)有任何官方(開(kāi)發(fā)工具的IntelliJIDEA,或框架官方Spring)說(shuō)過(guò)這樣的話(huà)!

首先,使用Spring實(shí)現(xiàn)自動(dòng)裝配時(shí),有3種方式:

通過(guò)構(gòu)造方法注入;通過(guò)Setter注入(即與字段屬性匹配的set方法);通過(guò)字段注入;

基本示例參見(jiàn)下圖:

以上圖片來(lái)自Spring官方提供的資料,可以看到最后還附了個(gè)URL,是國(guó)外網(wǎng)友寫(xiě)的一篇主題為《whyfieldinjectionisevil》的討論文章,有興趣且有一定英語(yǔ)閱讀能力的朋友可以自行上網(wǎng)查看全文,大意是“使用字段注入時(shí)可能導(dǎo)致NPE”!為什么會(huì)這樣呢?假設(shè)你有如下代碼:

如果你因?yàn)槟撤N原因直接創(chuàng)建對(duì)象,即通過(guò)UserServiceservice=newUserService();來(lái)創(chuàng)建對(duì)象,其中的userRepository屬性肯定是沒(méi)有值的,后續(xù)使用這個(gè)service對(duì)象時(shí),只要涉及調(diào)用userRepository就會(huì)出現(xiàn)NPE了!

既然UserService是一個(gè)組件,為什么還會(huì)直接創(chuàng)建對(duì)象呢?其實(shí)這也算是一個(gè)低概率的特殊情況,在彼此不太熟悉的協(xié)同工作中可能出現(xiàn),例如你和我一起開(kāi)發(fā)項(xiàng)目,我對(duì)你寫(xiě)的那部分代碼不太了解……再就是測(cè)試使用時(shí),也可能出現(xiàn)直接創(chuàng)建對(duì)象的情況……

如果將代碼改為下面這樣:

則剛才的問(wèn)題就不存在了!因?yàn)楝F(xiàn)在的構(gòu)造方法是需要參數(shù)的,你不給參數(shù),就創(chuàng)建不了對(duì)象!如果能創(chuàng)建出對(duì)象,就肯定給了參數(shù),則userRepository肯定有值,就不會(huì)出現(xiàn)NPE!當(dāng)然,如果你一定要傳個(gè)null進(jìn)去就沒(méi)辦法了,Nozuonodiewhyyoutry?

所以,使用構(gòu)造方法傳遞參數(shù)是一種強(qiáng)制依賴(lài)的做法,可以保證不會(huì)出現(xiàn)NPE,但是,如果參數(shù)太多會(huì)不會(huì)很奇怪?真的有必要把代碼寫(xiě)得這么滴水不漏嗎?這個(gè)就看你自己了!首先,是IntelliJIDEA并不建議你使用字段注入:

(截圖來(lái)自IntelliJIDEA2020.1.4)

而Spring的觀點(diǎn),可參見(jiàn)下圖:

可以看到,Spring是無(wú)所謂的,反正都能用(Springdoesn'tcare,canuseeither),當(dāng)然,也列舉了使用構(gòu)造方法注入和使用Setter注入的區(qū)別(雖然我在前面都是寫(xiě)的字段注入,在NPE問(wèn)題上,字段注入和Setter注入是一樣的)。

既然Spring都無(wú)所謂了,我們?yōu)槭裁催€要糾結(jié)注入方式呢?還是那句話(huà),只要你能保證不出錯(cuò),怎么都行!可能95%以上的Java從業(yè)者不是在寫(xiě)大廠的大型項(xiàng)目,合格的程序員也不會(huì)亂寫(xiě)代碼,由Setter或字段注入導(dǎo)致NPE的概率本來(lái)就極低,不一定需要為了“保證極端情況下也不出錯(cuò)”而刻意的把代碼調(diào)整為構(gòu)造方法注入,只要注意規(guī)避這個(gè)問(wèn)題即可!

另外,我在上面的代碼演示中,在構(gòu)造方法上加了@Autowired注解,在這里解釋一下:

如果類(lèi)中只存在默認(rèn)構(gòu)造方法(無(wú)論是你顯式的添加的,還是根本不寫(xiě),由編譯器添加的),則無(wú)需@Autowired注解,Spring會(huì)自動(dòng)調(diào)用,當(dāng)然,加了也不會(huì)出錯(cuò);如果類(lèi)中只存在唯一的構(gòu)造方法,Spring會(huì)自動(dòng)調(diào)用,且會(huì)自動(dòng)從Spring容器中找對(duì)象裝配為調(diào)用構(gòu)造方法的參數(shù),這種情況也是不需要添加@Autowired注解的,加了也不會(huì)出錯(cuò);如果類(lèi)中存在多個(gè)構(gòu)造方法,且都沒(méi)有添加@Autowired注解時(shí),當(dāng)存在無(wú)參數(shù)構(gòu)造方法時(shí),Spring會(huì)自動(dòng)調(diào)用無(wú)參數(shù)構(gòu)造方法,如果你想要Spring調(diào)用另外某一個(gè)構(gòu)造方法,就在那個(gè)構(gòu)造方法上添加@Autowired注解;如果類(lèi)中存在多個(gè)構(gòu)造方法,且超過(guò)1個(gè)構(gòu)造方法上都添加了@Autowired注解……你別作,你不需要知道Spring怎么處理,你只要把@Autowired刪得只有1個(gè)了,就肯定沒(méi)問(wèn)題!

所以,從道理上來(lái)說(shuō),應(yīng)該推薦顯式的為某1個(gè)構(gòu)造方法添加@Autowired注解,哪怕是不需要添加也能用,因?yàn)檫@樣會(huì)保證多構(gòu)造方法的情況下代碼更加直觀,增加代碼的可讀性,但是,從實(shí)際工作出發(fā),可能就變成了“有啥好加的?這點(diǎn)道理都不懂還上什么班?”……大家都懶得加了,所以,又不是什么很難懂的原理,加不加就自行把握吧。

最后,再總結(jié)一下使用原則:

@Autowired和@Resource在使用時(shí)可以不糾結(jié)它們的區(qū)別,使用它們的目的就是為了裝配對(duì)象,只要能裝得上,裝的是對(duì)的,無(wú)所謂使用哪個(gè)?一定要區(qū)分選取,先保證“在同一個(gè)項(xiàng)目中使用同一個(gè)”,不要一個(gè)類(lèi)使用@Autowired,另一個(gè)類(lèi)又使用@Resource,然后,我個(gè)人建議使用@Autowired,原因嘛,很簡(jiǎn)單,你既然用Spring框架,就用它帶的注解唄;關(guān)于@Autowired的使用方式,不怕麻煩就都使用構(gòu)造方法注入,且顯式的添加@Autowired,如果怕麻煩,只要不出錯(cuò),就隨意吧。

Spring官方也考慮到了網(wǎng)友關(guān)于@Resource或相關(guān)注解的問(wèn)題,因?yàn)闆](méi)什么需要特別解釋的了,就直接貼圖好了,大家自行查閱,以下圖片仍是來(lái)自Spring官方資料:

最后,近期因?yàn)楣ぷ鞯年P(guān)系看了不少Spring的官方資料,包括官方的Spring學(xué)習(xí)教程,有些感慨,給我的感覺(jué),Spring對(duì)外提倡實(shí)用主義,極少和你講理論,源碼什么的更是少得可憐,這也和面向?qū)ο蟮乃枷氡3忠恢拢思叶紟湍阕龊昧耍愫煤糜镁托辛耍槐仃P(guān)心實(shí)現(xiàn)細(xì)節(jié),希望大家也能這樣!現(xiàn)在IT行業(yè)真的被一些大廠帶節(jié)奏了,網(wǎng)上各種吸引眼球的XX源碼解析、XX底層原理、XX加載過(guò)程分析、XX算法、大廠案例、大廠面試題……很多時(shí)候真的想噴一句“你咋不從操作系統(tǒng)開(kāi)始做軟件研發(fā)呢”……真的,絕大部分Java從業(yè)者一輩子都進(jìn)不了大廠,也接觸不到超過(guò)20臺(tái)以上服務(wù)器才能扛得住的項(xiàng)目,除非是為了應(yīng)付面試,你甚至不需要知道i++和++i的區(qū)別,如果只是自己寫(xiě)代碼自己用,你也不需要知道private和public的區(qū)別……如果你只想開(kāi)自己的私家車(chē),不想修車(chē)也不想造車(chē),除了吹牛,你都不需要知道發(fā)動(dòng)機(jī)的型號(hào)……多掌握實(shí)用技術(shù),多積累解決問(wèn)題的經(jīng)驗(yàn),原理什么的能不管就不要管,當(dāng)熟練到一定程度后,再考慮要不要深入了解原理。

好了,就這么多,如果有錯(cuò)別字,大家將就一下吧(可編輯次數(shù)有限),如果有覺(jué)得不對(duì)的地方,歡迎留言討論。

軟件開(kāi)發(fā)的新潮流低代碼開(kāi)發(fā)平臺(tái)(如OutSystems、Mendix),能推薦優(yōu)秀的國(guó)產(chǎn)平臺(tái)嗎

分享個(gè)開(kāi)源項(xiàng)目的技術(shù)棧推薦個(gè)git上開(kāi)源的快速開(kāi)發(fā)項(xiàng)目,項(xiàng)目采用微服務(wù)為基礎(chǔ)的腳手架,包括流程、表單、列表、圖表、應(yīng)用等多個(gè)界面化的配置引擎。

項(xiàng)目介紹:

**JVS的核心目標(biāo):**讓中小型開(kāi)發(fā)團(tuán)隊(duì)過(guò)得輕松一點(diǎn),優(yōu)化開(kāi)發(fā)團(tuán)隊(duì)人力成本高、交付效率低、質(zhì)量不可控、周期不確定、基礎(chǔ)技術(shù)投入不足、高端技術(shù)支持不夠等JVS是面向軟件開(kāi)發(fā)團(tuán)隊(duì)可以快速實(shí)現(xiàn)應(yīng)用的基礎(chǔ)開(kāi)發(fā)框架,采用微服務(wù)分布式框架,提供豐富的基礎(chǔ)功能,集成眾多業(yè)務(wù)引擎,它靈活性強(qiáng),界面化配置對(duì)開(kāi)發(fā)者友好,底層容器化構(gòu)建,集合持續(xù)化構(gòu)建。

項(xiàng)目標(biāo)簽低代碼、微服務(wù)、支持SaaS、私有化部署、DevOps、開(kāi)源項(xiàng)目地址

框架前端地址:https://gitee.com/software-minister/jvs-ui框架后端地址:https://gitee.com/software-minister/jvs快速安裝地址:JVS/jvs-docker-compose

體驗(yàn)地址體驗(yàn)地址:http://frame.bctools.cn/#/login登陸可以通過(guò)微信掃碼登陸,對(duì)于配置數(shù)據(jù),請(qǐng)各位技術(shù)同學(xué)手下留情。部署文檔https://gitee.com/software-minister/jvs-docker-compose/blob/master/readme.md**物理拓?fù)洌?/p>

技術(shù)文檔地址(微信登陸可查看):

技術(shù)棧說(shuō)明:

系統(tǒng)部分截圖:

登陸頁(yè)面

配置化首頁(yè)

系統(tǒng)基礎(chǔ)信息設(shè)置

框架基礎(chǔ)功能

應(yīng)用創(chuàng)建()

列表配置

流程配置

表單配置

圖表配置

邏輯配置

Spring中ajax與后端傳輸數(shù)據(jù)的幾種方式

后臺(tái)解析ajax傳遞的數(shù)據(jù),這主要看前端傳遞數(shù)據(jù)的格式,主要有以下幾種常見(jiàn)的。

1、前端ajax傳遞表單數(shù)據(jù),類(lèi)似{name:'zhangsan',age:'17'}后臺(tái)只需利用request.getParameter("name")形式即可獲取對(duì)應(yīng)的value值。

2、前端傳遞json數(shù)據(jù)格式。后臺(tái)可以直接獲取json字符串,然后利用相關(guān)的API轉(zhuǎn)成對(duì)應(yīng)的Java對(duì)象。或者直接利用springMvc的注解@RequestBody注解。@RequestMapping(value="/save")publicvoidsave(@RequestBodyUseruser){}這樣傳遞的json數(shù)據(jù)會(huì)自動(dòng)封裝成user對(duì)象。如果當(dāng)前傳遞的是一個(gè)json數(shù)組,則后端可以定義一個(gè)VO對(duì)象,vo對(duì)象中存放一個(gè)userList。publicclassUserVO{privateList<User>dataList;}@RequestMapping(value="/save")publicvoidsave(@RequestBodyUserVOuserVO){

springboot未來(lái)會(huì)沒(méi)落嗎

不會(huì),SpringBoot已經(jīng)融合了一個(gè)生態(tài)圈,就像大家離不開(kāi)Spring一樣。快插拔式操作,為服務(wù)的整個(gè)提供了便捷。

未來(lái),也許會(huì)出現(xiàn)新的框架和技術(shù)。但那是基于SpringBoot基礎(chǔ)開(kāi)發(fā)的,就像SpringMVC、SpringBoot基于Spring一樣。會(huì)在此基礎(chǔ)上做改進(jìn),推出更新的版本。但是內(nèi)核沒(méi)有改變。就像SpringBoot主要實(shí)現(xiàn)了SpringMVC的自動(dòng)裝配,EnableAutoConfiguration,JavaSPI機(jī)制,WebMVCConfigure機(jī)制,底層還是有SpringMVC的影子。

做技術(shù)就要與時(shí)俱進(jìn),弄清楚框架底層原理,弄透設(shè)計(jì)思想,設(shè)計(jì)模式,才能長(zhǎng)久。

requestparam可以省略屬性名的是

當(dāng)注解@RequestMapping的value是其唯一屬性時(shí),可以省略屬性名

好了,文章到這里就結(jié)束啦,如果本次分享的requestmapping注解作用和getmapping注解用法問(wèn)題對(duì)您有所幫助,還望關(guān)注下本站哦!

返回列表
上一篇:
下一篇: