0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot Web相關(guān)的基礎(chǔ)知識(shí)

jf_78858299 ? 來(lái)源:QStack ? 作者:月下西樓 ? 2023-03-17 15:03 ? 次閱讀

上一篇文章我們已經(jīng)學(xué)會(huì)了如何通過(guò)IDEA快速建立一個(gè)Spring Boot項(xiàng)目,還介紹了Spring Boot項(xiàng)目的結(jié)構(gòu),介紹了項(xiàng)目配置文件pom.xml的組成部分,并且撰寫了我們Spring Boot的第一個(gè)接口。接下來(lái)將會(huì)將會(huì)介紹使用Spring Boot開(kāi)發(fā)Web應(yīng)用的相關(guān)內(nèi)容,其主要包括使用spring-boot-starter-web組件來(lái)實(shí)現(xiàn)Web應(yīng)用開(kāi)發(fā)、URL地址映射、參數(shù)傳遞、數(shù)據(jù)校驗(yàn)規(guī)、統(tǒng)一數(shù)據(jù)返回和統(tǒng)一異常處理等等。

Web基礎(chǔ)

Spring Boot將傳統(tǒng)Web開(kāi)發(fā)的mvc、json、validation、tomcat等框架整合,提供了spring-boot-starter-web組件,簡(jiǎn)化了Web應(yīng)用配置和開(kāi)發(fā)的難度,將開(kāi)發(fā)者從繁雜的配置項(xiàng)中拯救出來(lái),專注于業(yè)務(wù)邏輯的開(kāi)發(fā)。

正如上一篇文章所提到的,我們只需要在pom.xml文件中的dependencies中添加以下代碼就可以引入spring-boot-starter-web。其中的webmvc是Web開(kāi)發(fā)的基礎(chǔ)框架,json是JSON數(shù)據(jù)解析組建,tomcat為自帶的容器依賴。

<dependency>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>

@Controller和@RestController

Spring Boot提供了@Controller和@RestController兩種注解來(lái)標(biāo)識(shí)此類負(fù)責(zé)接收和處理HTTP請(qǐng)求,如果請(qǐng)求的是頁(yè)面和數(shù)據(jù),使用@Controller注解即可,如何只請(qǐng)求數(shù)據(jù),則可以使用哦@RestController注解。

@Controller

@Controller主要主要用于頁(yè)面和數(shù)據(jù)的返回,如果在@Controller類中只返回?cái)?shù)據(jù)到前臺(tái)頁(yè)面,則需要使用@ResponseBody注解,否則會(huì)報(bào)錯(cuò),其代碼如下:

@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello @Spring Boot!!!";
    }
}

@RestController

@RestController注解用于實(shí)現(xiàn)數(shù)據(jù)請(qǐng)求的處理,默認(rèn)情況下@RestController注解會(huì)將返回的對(duì)象數(shù)據(jù)轉(zhuǎn)換為JSON格式,其代碼如下:

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getUser")
    @ResponseBody
    public User getUser() {
        User u = new User();
        u.setName("QStack");
        u.setAge(20);
        u.setPassword("123456");
        return u;
    }
}

在上述的例子中,定義/user/getUser接口返回JSON格式的User數(shù)據(jù),近幾年前端框架越來(lái)越強(qiáng)大,前后端分離的RESTful架構(gòu)成為主流,Spring Boot對(duì)RESTful也做了非常完善的支持,使用也特別簡(jiǎn)單,使用@RestController注解自動(dòng)返回JSON格式的數(shù)據(jù),與此同時(shí)可以使用@GetMapping和@PostMapping等注解實(shí)現(xiàn)映射RESTful接口。

@ResponseBody

@ResponseBody注解主要用于定義數(shù)據(jù)的返回格式,作用在方法上,默認(rèn)使用Json序列化成JSON字符串后返回給客戶端,如果是字符串則直接返回。在@Controller中有時(shí)需要返回?cái)?shù)據(jù)體,則需要在方法上使用@Responsebody。

@RequestMapping與URL映射

注解@RequestMapping注解主要負(fù)責(zé)URL的路由映射,它可以添加在Controller類或具體的方法上,如果添加在Controller類上,則這個(gè)Controller中所有的路由映射都會(huì)加上此映射規(guī)則,如果添加在方法上則只對(duì)當(dāng)前方法生效。@RequestMapping注解包含很多屬性參數(shù)來(lái)定義HTTP,具體屬性參數(shù)如下所示,與此相應(yīng)的Spring Boot支持URL路徑匹配、HTTP Method匹配、params和header匹配等URL映射。

  • value:請(qǐng)求URL的路徑,支持URL模版、正則表達(dá)式
  • method:HTTP請(qǐng)求的方法
  • consumes:允許的媒體類型,如consumes=“application/json”為HTTP的Content-Type
  • produces:相應(yīng)的媒體類型,如produces=“application/json”為HTTP的Accept字段
  • params:請(qǐng)求參數(shù)
  • headers:請(qǐng)求頭參數(shù)

URL路徑匹配

精確匹配

@RequestMapping的value屬性用于匹配URL映射,value支持簡(jiǎn)單表達(dá)式。示例代碼如下,其中@PathVariable注解作用在方法參數(shù)中,用于表示參數(shù)的值來(lái)自于URL路徑。

@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable("id") Long id) {
    return "getUserById" + id;
}

如果URL中的參數(shù)名稱與方法中的參數(shù)名一致,則可以簡(jiǎn)化為如下

@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable Long id) {
    return "getUserById" + id;
}

通配符匹配

@RequsetMapping支持使用通配符匹配URL,用于統(tǒng)一映射某些URL規(guī)則類似的請(qǐng)求,示例的代碼如下

@RequestMapping("/getJson/*.json")
public String getJson() {
    return "get json data";
}

在上例中,無(wú)論請(qǐng)求/getJson/a.json還是請(qǐng)求/getJson/b.json都會(huì)匹配到getJson方法。

Method匹配

@RequestMapping注解提供了method參數(shù)指定請(qǐng)求的Mathod類型,包括RequestMethod.GET 、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分別對(duì)應(yīng)HTTP請(qǐng)求的Method,以下是以GET方法為例說(shuō)明。

@RequestMapping(value = "/getData", method = RequestMethod.GET)
public String getData() {
    return "RequestMethod GET";
}

consumes和produces匹配

@RequestMapping注解提供了consumes和produces參數(shù)用于驗(yàn)證HTTP請(qǐng)求的內(nèi)容類型和返回類型。

  • consumes表示請(qǐng)求的HTTP頭的Content-Type媒體類型與consumes的值匹配才可以調(diào)用方法。
  • produces表示HTTP請(qǐng)求中Accept字段匹配成功才可以調(diào)用。下面的例子演示了consumes參數(shù)的用法。
@RequestMapping(value = "/content", method = RequestMethod.POST, consumes = "application/json")
public String Consumes(@RequestBody Map param){
    return "Consumes POST Content-Type=application/json";
}

params和header匹配

@RequestMapping注解還提供header參數(shù)和params參數(shù)映射URL請(qǐng)求的能力,Spring Boot可以從請(qǐng)求參數(shù)或HTTP頭中提取參數(shù),通過(guò)判斷參數(shù)如params=“action=save”是否通過(guò)來(lái)實(shí)現(xiàn)映射,代碼如下

@RequestMapping(value = "/testParam", params = "action=save")
public String testParam(@RequestBody Map param) {
    return "param test";
}
@RequestMapping(value = "/testHead", headers = {"Host=localhost:8080"})
public String testHead() {
    return "header test";
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1266

    瀏覽量

    69557
  • URL
    URL
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    15386
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14361
  • idea
    +關(guān)注

    關(guān)注

    1

    文章

    68

    瀏覽量

    4290
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    啟動(dòng)Spring Boot項(xiàng)目應(yīng)用的三種方法

    的讀取,開(kāi)啟注解4)配置日志文件...配置完成之后部署tomcat 調(diào)試。但是如果使用spring boot呢?很簡(jiǎn)單,我僅僅只需要非常少的幾個(gè)配置就可以迅速方便的搭建起來(lái)一套web項(xiàng)目或者是構(gòu)建一個(gè)
    發(fā)表于 01-14 17:33

    談一談Spring Boot嵌入式Web容器

    Spring Boot嵌入式Web容器Embedded Tomcatorg.springframework.boot.context.embedded.EmbeddedServletConta
    發(fā)表于 12-16 08:16

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標(biāo)是構(gòu)建“非常容易創(chuàng)建、獨(dú)立、產(chǎn)品級(jí)別的基于
    發(fā)表于 12-16 07:57

    Spring Boot定時(shí)任務(wù)的重寫方法

    Spring Boot應(yīng)該是目前最火的java開(kāi)源框架了,它簡(jiǎn)化了我們創(chuàng)建一個(gè)web服務(wù)的過(guò)程,讓我們可以在很短時(shí)間、基本零配置就可以啟動(dòng)一個(gè)web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2462次閱讀

    Spring Boot從零入門1 詳述

    在開(kāi)始學(xué)習(xí)Spring Boot之前,我之前從未接觸過(guò)Spring相關(guān)的項(xiàng)目,Java基礎(chǔ)還是幾年前自學(xué)的,現(xiàn)在估計(jì)也忘得差不多了吧,寫Spring
    的頭像 發(fā)表于 12-10 22:18 ?655次閱讀

    Spring認(rèn)證」什么是Spring GraphQL?

    這個(gè)項(xiàng)目建立在 Boot 2.x 上,但它應(yīng)該與最新的 Boot2.4.x5 相關(guān)。 要?jiǎng)?chuàng)建項(xiàng)目,請(qǐng)轉(zhuǎn)到start.spring.io并為要使用的GraphQL傳輸選擇啟動(dòng)器: 啟動(dòng)機(jī)
    的頭像 發(fā)表于 08-10 14:08 ?846次閱讀
    「<b class='flag-5'>Spring</b>認(rèn)證」什么是<b class='flag-5'>Spring</b> GraphQL?

    學(xué)習(xí)Spring Boot 嵌入式服務(wù)器

    嵌入式Web服務(wù)器每個(gè)Spring Boot Web應(yīng)用程序都包含一個(gè)嵌入式Web服務(wù)器。此功能會(huì)導(dǎo)致許多操作方法問(wèn)題,包括如何更改嵌入式服
    發(fā)表于 10-20 15:36 ?7次下載
    學(xué)習(xí)<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 嵌入式服務(wù)器

    Spring Boot特有的實(shí)踐

    Spring Boot是最流行的用于開(kāi)發(fā)微服務(wù)的Java框架。在本文中,我將與你分享自2016年以來(lái)我在專業(yè)開(kāi)發(fā)中使用Spring Boot所采用的最佳實(shí)踐。這些內(nèi)容是基于我的個(gè)人經(jīng)驗(yàn)
    的頭像 發(fā)表于 09-29 10:24 ?927次閱讀

    簡(jiǎn)述Spring Boot數(shù)據(jù)校驗(yàn)

    上一篇文章我們了解了Spring Boot Web相關(guān)知識(shí),初步了解了spring-boot-star
    的頭像 發(fā)表于 03-17 15:07 ?802次閱讀

    Spring Boot配置加載相關(guān)知識(shí)

    Spring BOOT 啟動(dòng)參數(shù) 在Java Web的開(kāi)發(fā)完成后,以前我們都會(huì)打包成war文件,然后放大web容器,比如tomcat、jetty這樣的容器。現(xiàn)在基于SpringBoot
    的頭像 發(fā)表于 10-07 15:47 ?500次閱讀

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項(xiàng)目的過(guò)程中,使用過(guò) Spring Boot Actuator 嗎?知道 Spring
    的頭像 發(fā)表于 10-09 17:11 ?659次閱讀

    Spring Boot啟動(dòng) Eureka流程

    在上篇中已經(jīng)說(shuō)過(guò)了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來(lái)看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring
    的頭像 發(fā)表于 10-10 11:40 ?904次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動(dòng) Eureka流程

    Spring Boot的啟動(dòng)原理

    spring-boot-maven-plugin 的 maven 項(xiàng)目打包插件,可以方便的將 Spring Boot 項(xiàng)目打成 jar 包。這樣我們就不再需要部署 Tomcat 、Jetty等之類的
    的頭像 發(fā)表于 10-13 11:44 ?671次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動(dòng)原理

    Spring Boot 的設(shè)計(jì)目標(biāo)

    什么是Spring Boot Spring BootSpring 開(kāi)源組織下的一個(gè)子項(xiàng)目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?596次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)

    Spring事務(wù)傳播性的相關(guān)知識(shí)

    本文主要介紹了Spring事務(wù)傳播性的相關(guān)知識(shí)。
    的頭像 發(fā)表于 01-10 09:29 ?470次閱讀
    <b class='flag-5'>Spring</b>事務(wù)傳播性的<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>