最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC使用RESTful接口案例

 更新時(shí)間:2022年12月07日 15:27:28   作者:-BoBooY-  
RESTful是一種web軟件風(fēng)格,它不是標(biāo)準(zhǔn)也不是協(xié)議,它不一定要采用,只是一種風(fēng)格,它倡導(dǎo)的是一個(gè)資源定位(url)及資源操作的風(fēng)格,這篇文章主要介紹了SpringBoot使用RESTful接口

控制器Controller

  • 控制器復(fù)雜提供訪問應(yīng)用程序的行為,通常通過接口定義或注解定義兩種方法實(shí)現(xiàn)。
  • 控制器負(fù)責(zé)解析用戶的請(qǐng)求并將其轉(zhuǎn)換為一個(gè)模型。
  • 在Spring MVC中一個(gè)控制器類可以包含多個(gè)方法
  • 在Spring MVC中,對(duì)于Controller的配置方式有很多種

方法一-實(shí)現(xiàn)Controller接口

Controller是一個(gè)接口,在org.springframework.web.servlet.mvc包下,接口中只有一個(gè)方法;

//實(shí)現(xiàn)該接口的類獲得控制器功能
public interface Controller {
   //處理請(qǐng)求且返回一個(gè)模型與視圖對(duì)象
   ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}

測(cè)試

新建一個(gè)Moudle,springmvc-04-controller 。將剛才的03 拷貝一份, 我們進(jìn)行操作!

  • 刪掉HelloController
  • mvc的配置文件只留下 視圖解析器!

編寫一個(gè)Controller類,ControllerTest1

//定義控制器
//注意點(diǎn):不要導(dǎo)錯(cuò)包,實(shí)現(xiàn)Controller接口,重寫方法;
public class ControllerTest1 implements Controller {
   public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
       //返回一個(gè)模型視圖對(duì)象
       ModelAndView mv = new ModelAndView();
       mv.addObject("msg","Test1Controller");
       mv.setViewName("test");
       return mv;
  }
}

編寫完畢后,去Spring配置文件中注冊(cè)請(qǐng)求的bean;name對(duì)應(yīng)請(qǐng)求路徑,class對(duì)應(yīng)處理請(qǐng)求的類

<bean name="/t1" class="com.bby.controller.ControllerTest1"/>

編寫前端test.jsp,注意在WEB-INF/jsp目錄下編寫,對(duì)應(yīng)我們的視圖解析器

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>bby</title>
</head>
<body>
${msg}
</body>
</html>

配置Tomcat運(yùn)行測(cè)試,我這里沒有項(xiàng)目發(fā)布名配置的就是一個(gè) / ,所以請(qǐng)求不用加項(xiàng)目名,OK!

說明:

  • 實(shí)現(xiàn)接口Controller定義控制器是較老的辦法
  • 缺點(diǎn)是:一個(gè)控制器中只有一個(gè)方法,如果要多個(gè)方法則需要定義多個(gè)Controller;定義的方式比較麻煩;

方式二-使用注解@Controller

@Controller注解類型用于聲明Spring類的實(shí)例是一個(gè)控制器(在講IOC時(shí)還提到了另外3個(gè)注解);

Spring可以使用掃描機(jī)制來找到應(yīng)用程序中所有基于注解的控制器類,為了保證Spring能找到你的控制器,需要在配置文件中聲明組件掃描。

<!-- 自動(dòng)掃描指定的包,下面所有注解類交給IOC容器管理 -->
<context:component-scan base-package="com.bby.controller"/>

增加一個(gè)ControllerTest2類,使用注解實(shí)現(xiàn);

//@Controller注解的類會(huì)自動(dòng)添加到Spring上下文中
@Controller
public class ControllerTest2{
   //映射訪問路徑
   @RequestMapping("/t2")
   public String index(Model model){
       //Spring MVC會(huì)自動(dòng)實(shí)例化一個(gè)Model對(duì)象用于向視圖中傳值
       model.addAttribute("msg", "ControllerTest2");
       //返回視圖位置
       return "test";
  }
}

運(yùn)行tomcat測(cè)試

可以發(fā)現(xiàn),我們的兩個(gè)請(qǐng)求都可以指向一個(gè)視圖,但是頁(yè)面結(jié)果的結(jié)果是不一樣的,從這里可以看出視圖是被復(fù)用的,而控制器與視圖之間是弱偶合關(guān)系。

注解方式是平時(shí)使用的最多的方式!

@RequestMapping

@RequestMapping注解用于映射url到控制器類或一個(gè)特定的處理程序方法。可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。

為了測(cè)試結(jié)論更加準(zhǔn)確,我們可以加上一個(gè)項(xiàng)目名測(cè)試 myweb

只注解在方法上面

@Controller
public class TestController {
   @RequestMapping("/h1")
   public String test(){
       return "test";
  }
}

訪問路徑:http://localhost:8080 / 項(xiàng)目名 / h1

同時(shí)注解類與方法

@Controller
@RequestMapping("/admin")
public class TestController {
   @RequestMapping("/h1")
   public String test(){
       return "test";
  }
}

訪問路徑:http://localhost:8080 / 項(xiàng)目名/ admin /h1 , 需要先指定類的路徑再指定方法的路徑;

RestFul風(fēng)格

概念

Restful就是一個(gè)資源定位及資源操作的風(fēng)格。不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格?;谶@個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡(jiǎn)潔,更有層次,更易于實(shí)現(xiàn)緩存等機(jī)制。

功能

資源:互聯(lián)網(wǎng)所有的事物都可以被抽象為資源

資源操作:使用POST、DELETE、PUT、GET,使用不同方法對(duì)資源進(jìn)行操作。

分別對(duì)應(yīng) 添加、 刪除、修改、查詢。

傳統(tǒng)方式操作資源 :通過不同的參數(shù)來實(shí)現(xiàn)不同的效果!方法單一,post 和 get

? http://127.0.0.1/item/queryItem.action?id=1 查詢,GET

? http://127.0.0.1/item/saveItem.action 新增,POST

? http://127.0.0.1/item/updateItem.action 更新,POST

? http://127.0.0.1/item/deleteItem.action?id=1 刪除,GET或POST

使用RESTful操作資源 :可以通過不同的請(qǐng)求方式來實(shí)現(xiàn)不同的效果!如下:請(qǐng)求地址一樣,但是功能可以不同!

? http://127.0.0.1/item/1 查詢,GET

? http://127.0.0.1/item 新增,POST

? http://127.0.0.1/item 更新,PUT

? http://127.0.0.1/item/1 刪除,DELETE

學(xué)習(xí)測(cè)試

在新建一個(gè)類 RestFulController

@Controller
public class RestFulController {
}

在Spring MVC中可以使用 @PathVariable 注解,讓方法參數(shù)的值對(duì)應(yīng)綁定到一個(gè)URI模板變量上。

@Controller
public class RestFulController {
   //映射訪問路徑
   @RequestMapping("/commit/{p1}/{p2}")
   public String index(@PathVariable int p1, @PathVariable int p2, Model model){
       int result = p1+p2;
       //Spring MVC會(huì)自動(dòng)實(shí)例化一個(gè)Model對(duì)象用于向視圖中傳值
       model.addAttribute("msg", "結(jié)果:"+result);
       //返回視圖位置
       return "test";
  }
}

我們來測(cè)試請(qǐng)求查看下

思考:使用路徑變量的好處?

  • 使路徑變得更加簡(jiǎn)潔;
  • 獲得參數(shù)更加方便,框架會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。
  • 通過路徑變量的類型可以約束訪問參數(shù),如果類型不一樣,則訪問不到對(duì)應(yīng)的請(qǐng)求方法,如這里訪問是的路徑是/commit/1/a,則路徑與方法不匹配,而不會(huì)是參數(shù)轉(zhuǎn)換失敗。

我們來修改下對(duì)應(yīng)的參數(shù)類型,再次測(cè)試

//映射訪問路徑
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable String p2, Model model){
   String result = p1+p2;
   //Spring MVC會(huì)自動(dòng)實(shí)例化一個(gè)Model對(duì)象用于向視圖中傳值
   model.addAttribute("msg", "結(jié)果:"+result);
   //返回視圖位置
   return "test";
}

使用method屬性指定請(qǐng)求類型

用于約束請(qǐng)求的類型,可以收窄請(qǐng)求范圍。指定請(qǐng)求謂詞的類型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

我們來測(cè)試一下:

增加一個(gè)方法

//映射訪問路徑,必須是POST請(qǐng)求
@RequestMapping(value = "/hello",method = {RequestMethod.POST})
public String index2(Model model){
   model.addAttribute("msg", "hello!");
   return "test";
}

我們使用瀏覽器地址欄進(jìn)行訪問默認(rèn)是Get請(qǐng)求,會(huì)報(bào)錯(cuò)405:

如果將POST修改為GET則正常了;

//映射訪問路徑,必須是Get請(qǐng)求
@RequestMapping(value = "/hello",method = {RequestMethod.GET})
public String index2(Model model){
   model.addAttribute("msg", "hello!");
   return "test";
}

小結(jié):

Spring MVC 的 @RequestMapping 注解能夠處理 HTTP 請(qǐng)求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

所有的地址欄請(qǐng)求默認(rèn)都會(huì)是 HTTP GET 類型的。

方法級(jí)別的注解變體有如下幾個(gè):組合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@GetMapping 是一個(gè)組合注解,平時(shí)使用的會(huì)比較多!

它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一個(gè)快捷方式。

到此這篇關(guān)于SpringMVC使用RESTful接口案例的文章就介紹到這了,更多相關(guān)SpringMVC RESTful內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn)

    SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn)

    本文主要介紹了SpringBoot?AOP?Redis實(shí)現(xiàn)延時(shí)雙刪功能實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Mybatis環(huán)境搭建和使用實(shí)例代碼

    Mybatis環(huán)境搭建和使用實(shí)例代碼

    MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射。本文重點(diǎn)給大家介紹Mybatis的環(huán)境搭建和使用實(shí)例代碼,需要的朋友參考下吧
    2017-12-12
  • JDK輸入命令Javac報(bào)錯(cuò)的解決方法

    JDK輸入命令Javac報(bào)錯(cuò)的解決方法

    相信很多人都經(jīng)歷過配置環(huán)境變量失敗的經(jīng)歷,尤其是很多時(shí)候明明按照老師教的步驟或者教程上的方法循規(guī)守矩配置卻還是出錯(cuò),下面我們來解決一個(gè)非常蹊蹺的問題---輸入Java和Java -version都沒問題,但是輸入Javac報(bào)錯(cuò),感興趣的朋友一起看看吧
    2023-11-11
  • Java獲取接口的所有實(shí)現(xiàn)類方法總結(jié)示例

    Java獲取接口的所有實(shí)現(xiàn)類方法總結(jié)示例

    這篇文章主要給大家介紹了關(guān)于Java獲取接口的所有實(shí)現(xiàn)類方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-06-06
  • Springboot的啟動(dòng)原理詳細(xì)解讀

    Springboot的啟動(dòng)原理詳細(xì)解讀

    這篇文章主要介紹了Springboot的啟動(dòng)原理詳細(xì)解讀,springboot項(xiàng)目一般都是打包成jar包直接運(yùn)行main方法啟動(dòng),當(dāng)然也可以跟傳統(tǒng)的項(xiàng)目一樣打包war包放在tomcat里面啟動(dòng).那么springboot怎么直接通過main方法啟動(dòng)呢,需要的朋友可以參考下
    2023-11-11
  • java學(xué)習(xí)DongTai被動(dòng)型IAST工具部署過程

    java學(xué)習(xí)DongTai被動(dòng)型IAST工具部署過程

    被動(dòng)型IAST被認(rèn)為是DevSecOps測(cè)試階段實(shí)現(xiàn)自動(dòng)化安全測(cè)試的最佳工具,而就在前幾天,洞態(tài)IAST正式開源了,這對(duì)于甲方構(gòu)建安全工具鏈來說,絕對(duì)是一個(gè)大利好
    2021-10-10
  • 詳細(xì)SpringBoot生命周期接口的使用

    詳細(xì)SpringBoot生命周期接口的使用

    本文主要介紹了SpringBoot生命周期接口的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java日期時(shí)間格式化操作DateUtils 的整理

    Java日期時(shí)間格式化操作DateUtils 的整理

    這篇文章主要介紹了Java日期時(shí)間格式化操作DateUtils 的整理的相關(guān)資料,這里總結(jié)了java日期格式化的操作,需要的朋友可以參考下
    2017-07-07
  • Spring Data Jpa如何實(shí)現(xiàn)批量插入或更新

    Spring Data Jpa如何實(shí)現(xiàn)批量插入或更新

    文章總結(jié):本文分享了四種Spring Data JPA批量插入或更新的方法,包括BatchConsumer、QueryParameterBuilder、KeyValue和SqlUtil,旨在為開發(fā)者提供實(shí)用的參考
    2024-12-12
  • JavaWeb中的簡(jiǎn)單分頁(yè)完整代碼(推薦)

    JavaWeb中的簡(jiǎn)單分頁(yè)完整代碼(推薦)

    這次主要是講解一下通過登錄后對(duì)得到的數(shù)據(jù)進(jìn)行分頁(yè),首先我們新建一個(gè)登錄頁(yè)面login.jsp,因?yàn)槲覀冎饕獙W(xué)習(xí)的分頁(yè),所以登錄驗(yàn)證的部分沒有提到。關(guān)于javaweb中的分頁(yè)代碼大家通過本文學(xué)習(xí)吧
    2016-11-11

最新評(píng)論

宝兴县| 黄龙县| 瓦房店市| 故城县| 交城县| 古蔺县| 天镇县| 通州区| 六安市| 双牌县| 麻栗坡县| 吴桥县| 盘山县| 宁陵县| 汕尾市| 芜湖市| 多伦县| 东乌珠穆沁旗| 宁都县| 宝丰县| 崇仁县| 崇义县| 富平县| 鹰潭市| 彩票| 灵武市| 思南县| 延寿县| 苏尼特左旗| 苍梧县| 常山县| 云浮市| 治多县| 靖宇县| 吐鲁番市| 绥江县| 元氏县| 开化县| 石门县| 高雄市| 乌拉特前旗|