SpringBoot?Web請求響應(yīng)詳細(xì)代碼示例
1. 請求
Postman
Postman是一款功能強(qiáng)大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chorme插件
作用:常用于進(jìn)行接口測試
簡單參數(shù)
原始方式
在原始的web程序中,獲取請求參數(shù),需要通過HttpServeletRequest對象手動獲取。@RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request){ String name = request.getParameter("name"); String ageStr = request.getParameter("age"); int age = Integer.parseInt(ageStr); System.out.println(name + " : " + age); return "OK"; }
Postman調(diào)試:
http://localhost:8080/simpleParam?name=Tom&age=10
SpringBoot方式
@RequestMapping("/simpleParam") public String simpleParam(String name,Integer age){ System.out.println(name + " : " + age); return "OK"; }
如果方法形參名稱與請求參數(shù)名稱不匹配,可以使用
@RequestParam
完成映射**RequestParam
中的required屬性默認(rèn)是true,代表該請求參數(shù)必須傳遞,如果不傳遞將報(bào)錯(cuò)。如果該參數(shù)想要設(shè)置可選的,可以將required屬性設(shè)置為false **@RequestMapping("/simpleParam") public String simpleParam(@RequestParam(name="username")String name,Integer age){ System.out.println(name + " : " + age); return "OK"; }
實(shí)體參數(shù)
簡單實(shí)體對象
請求參數(shù)名與形參對象屬性名相同,定義POJO接收即可復(fù)雜實(shí)體對象
請求參數(shù)名與形參對象屬性名相同,按照對象層次結(jié)構(gòu)關(guān)系即可接收嵌套POJO屬性參數(shù)
數(shù)據(jù)集合參數(shù)
數(shù)組參數(shù)
請求參數(shù)名與形參組名稱相同且請求參數(shù)為多個(gè),定義數(shù)組類型即可接收參數(shù)
請求參數(shù)名與形參中數(shù)組變量名相同,可以直接使用數(shù)組封裝
@RequestMapping("/arrayParam") public String arrayParam(String[] hobby){ System.out.println(Arrays.toString(hobby)); return "OK"; }
集合參數(shù)
請求參數(shù)名與形參集合名稱相同且請求參數(shù)為多個(gè),
@RequestParam
綁定參數(shù)關(guān)系請求求參數(shù)名與形參中集合變量名相同,通過@RequestParam 綁定參數(shù)關(guān)系
@RequestMapping("/listParam") public String listParam(@RequestParam List<String> hobby){ System.out.println(hobby); return "OK"; }
日期參數(shù)
使用@DateTimeFormat
注解完成日期參數(shù)格式轉(zhuǎn)換
@RequestMapping("/dateParam") public String dataParam(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){ System.out.println(updateTime); return "OK"; }
JSON參數(shù)
JSON數(shù)據(jù)鍵名與形參對象屬性名相同,定義POJO類型形參即可接收參數(shù),需要使用 @RequestBody
標(biāo)識
@RequestMapping("/jsonParam") public String jsonParam(@RequestBody User user){ System.out.println(user); return "OK"; }
路徑參數(shù)
通過請求URL直接傳遞參數(shù),使用{…}來標(biāo)識該路徑參數(shù),需要使用 @PathVaribale
獲取路徑參數(shù)
@RequestMapping("/path/{id}/{name}") public String pathParam(@PathVariable Integer id,@PathVariable String name){ System.out.println(id+" : " + name); return "OK"; }
2. 響應(yīng)
- @ResponseBody
- 類型:方法注解、類注解
- 位置:Controller方法上/類上
- 作用:將方法返回值直接響應(yīng),如果返回值是 實(shí)體對象/集合,將會轉(zhuǎn)換為JSON格式響應(yīng)
- 說明:@RestController=@Controller+@ResponseBody
統(tǒng)一響應(yīng)結(jié)果
public class Result{ //響應(yīng)碼,1代表成功;0代表失敗 private Integer code; //提示信息 private String msg; //返回的數(shù)據(jù) private Object data; //... }
3. 分層解耦
三層架構(gòu)
- controller:控制層,接收前端發(fā)送的請求,對請求進(jìn)行處理,并響應(yīng)數(shù)據(jù)。
- service:業(yè)務(wù)邏輯層,處理具體的業(yè)務(wù)邏輯。
- dao:數(shù)據(jù)訪問層(Data Access Object)(持久層),負(fù)責(zé)數(shù)據(jù)訪問操作,包括數(shù)據(jù)的增刪查改。
分層解耦
- 內(nèi)聚:軟件中各個(gè)功能模塊內(nèi)部的功能聯(lián)系。
- 耦合:衡量軟件中各個(gè)層/模塊之間的依賴、關(guān)聯(lián)的程度。
- 軟件設(shè)計(jì)原則:高內(nèi)聚低耦合。
- 控制反轉(zhuǎn)Inversion Of Control,簡稱IOC。對象的創(chuàng)建控制權(quán)由程序自身轉(zhuǎn)移到外部(容器),這種思想稱為控制反轉(zhuǎn)。
- 依賴注入Dependency Injection,簡稱DI。容器為應(yīng)用程序提供運(yùn)行時(shí),所以來的資源,稱之為依賴注入。
- Bean對象IOC容器中創(chuàng)建、管理的對象,稱之為bean
IOC & DI入門
Service層及Dao層的實(shí)現(xiàn)類,交給IOC容器管理
@Component //交給IOC容器管理 public class EmpDao implements EmpDao{...} @Component //交給IOC容器管理 public class EmpServiceA implements EmpService{...}
Controller及Service注入運(yùn)行時(shí),依賴的對象。
@Component public class EmpServiceA implements EmpService{ @Autowired //依賴注入 private EmpDao empDao; } @RestController public class EmpController { @Autowired //依賴注入 private EmpService empService; }
IOC詳解
Bean的聲明要把某個(gè)對象交給IOC容器,需要在對應(yīng)的類上加上如下注解之一:
注解 說明 位置 @Component 聲明bean的基礎(chǔ)注解 不屬于以下三類時(shí),用此注解 @Controller @Component的衍生注解 標(biāo)注在控制器類上 @Service @Component的衍生注解 標(biāo)注在業(yè)務(wù)類上 @Repository @Component的衍生注解 標(biāo)注在數(shù)據(jù)訪問類上(由于與mybatis整合,用的少) 注意事項(xiàng)
- 聲明bean的時(shí)候,可以通過value屬性指定bean的名字,如果美歐指定,默認(rèn)為類名首字母小寫
- 使用以上四個(gè)注解都可以聲明bean,但是在springboot繼承web開發(fā)中,聲明控制器bean只能用@Controller
Bean組件掃描
- 前面聲明bean的四大注解,想要生效, 還需要被組件掃描注解
ComponentScan
掃描。 @ComponentScan
注解雖然沒有顯式配置,但是實(shí)際上以及包含了啟動類聲明注解@SpringBootApplication
中,默認(rèn)掃描的范圍是啟動類所在包及其子包。
- 前面聲明bean的四大注解,想要生效, 還需要被組件掃描注解
DI詳解
Bean注入
@AutoWired
注解,默認(rèn)是按照類型進(jìn)行,如果存在多個(gè)相同類型的bean,將會報(bào)出如下錯(cuò)誤:通過以下幾種方案來解決:
@Primary
@Primary @Service public class EmpServiceA implements EmpService{}
@Qualifier
@RestController public class EmpController{ @Autowired @Qualifier("empServiceA") private EmpService empService; }
@Resource
@RestController public class EmpController{ @Resource(name="empServiceA") private EmpService empService; }
@Resource
與@Autowired
區(qū)別@Autowired
是spring框架提供的注解,而@Resource
是JDK提供的注解。@Autowired
默認(rèn)是按照類型注入,而@Resource
默認(rèn)是按照名稱注入。
總結(jié)
到此這篇關(guān)于SpringBoot Web請求響應(yīng)的文章就介紹到這了,更多相關(guān)SpringBoot Web請求響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis-flex與springBoot整合的實(shí)現(xiàn)示例
Mybatis-flex提供了簡單易用的API,開發(fā)者只需要簡單的配置即可使用,本文主要介紹了mybatis-flex與springBoot整合,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01JavaWeb監(jiān)聽器Listener實(shí)例解析
這篇文章主要為大家詳細(xì)介紹了JavaWeb監(jiān)聽器Listener實(shí)例,針對監(jiān)聽器進(jìn)行進(jìn)行細(xì)致分析,感興趣的小伙伴們可以參考一下2016-08-08關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠(yuǎn)程調(diào)用
Spring Cloud 是一套完整的微服務(wù)解決方案,基于 Spring Boot 框架,準(zhǔn)確的說,它不是一個(gè)框架,而是一個(gè)大的容器,它將市面上較好的微服務(wù)框架集成進(jìn)來,從而簡化了開發(fā)者的代碼量,需要的朋友可以參考下2023-05-05idea中如何過濾某些文件不提交的方法實(shí)現(xiàn)
本文主要介紹了idea中如何過濾某些文件不提交,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07