目錄
@RequestMapping
@RequestParam
@PathVariable
@ResponseBody
@RequestBody
@CookieValue
@RequestHeader
@ExceptionHandler
首頁 Java Java基礎 springmvc常用5種註解的使用

springmvc常用5種註解的使用

Jul 01, 2020 pm 05:25 PM
springmvc

springmvc的常見5種註解:1、@RequestMapping,是用來處理請求位址對映的註解;2、@RequestParam,用來將請求參數區資料對應到功能處理方法的參數; 3、@PathVariable,用於將請求變數。

springmvc常用5種註解的使用

@RequestMapping

是用來處理請求位址對映的註解
適用於類別、方法。用於類別上,表示類別中的所有回應請求的方法都是以該位址作為父路徑。

屬性

value: 指定請求的實際位址,值可以是普通的具體值,可以指定為含有某變數的一類值(URI Template Patterns with Path Variables)
可以指定為含正規表示式的一類值(URI Template Patterns with Regular Expressions)
method: 指定要求的method類型,GET、POST、PUT、DELETE等
consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/html
produces: 指定傳回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才傳回
params: 指定request中必須包含某些參數值是,才讓該方法處理
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求

  1.处理get请求: @RequestMapping(value = "index",method = RequestMethod.GET)
  2.springboot错误处理(使用app客户端返回json格式,使用浏览器返回html错误页)
   @RequestMapping(produces = "text/html")
  3.方法仅处理request Content-Type为“application/json”类型的请求
   @RequestMapping(value = "/pets", consumes="application/json")
  4.仅处理请求中包含了名为“myParam”,值为“myValue”的请求
   @RequestMapping(value = "/pets/{petId}", params="myParam=myValue") 
  5.仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.rxy.com/”的请求
   @RequestMapping(value = "/pets", headers="Referer=http://www.rxy.com/")
登入後複製

@RequestParam

用於將請求參數區資料對應到功能處理方法的參數上
適用:方法參數

屬性

value/name: 兩個屬性都指涉參數名字,即入參的請求參數名字(通常表單name屬性)
required: 是否必須,預設是true,表示請求中一定要有相應的參數,否則將拋出異常
defaultValue: 默認值,表示如果請求中沒有同名參數時的預設值,設定該參數時,自動將required設為false

  如果是原子类型,不管加没加注解,都必须有值,否则抛出异常,如果允许空值请使用包装类代替
  index(@RequestParam Integer num){}  表示该参数必须传递,值允许为空
  表示该参数非必须,如果不传则默认为0
  getPageData(@RequestParam(name="pageNum",defaultValue="0") String pageNo, String pageSize)
登入後複製

@PathVariable

#用於將請求URL中的範本變數映射到功能處理方法的參數上,即取出uri模板中的變數作為參數
適用:方法參數

#屬性

value: 指定url模版變數名稱,如果名稱與方法參數名不一樣,則需要指定,否則可省略

    @RequestMapping("/index/{id}")
         public String index(@PathVariable("id") String sdf){
           System.out.println(sdf);
           return "index";
     }
登入後複製

@ResponseBody

該註解用於將Controller的方法傳回的對象,透過適當的 HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區,預設springmvcjson形式傳回(使用jackson轉換器)
適用:方法,傳回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用
對比: @RequestBody 將HTTP請求正文轉換為適合的HttpMessageConverter對象
@ResponseBody 將內容或對像作為HTTP 響應正文返回,並調用適合HttpMessageConverter的Adapter轉換對象,寫入輸出流

@RequestBody

1.此註解用於讀取Request請求的body部分數據,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料綁定到要返回的物件上
2.再把HttpMessageConverter傳回的物件資料綁定到controller中方法的參數上
適用:方法參數,對於request的Content-Type:為application/json, application/xml必須使用該註解
對於application/x-www-form-urlencoded,如果請求方式為put,則為必須,
對於POST/GET方式可選(即非必須,因為@RequestParam,@ModelAttribute也可以處理)
對於multipart/form-data, @RequestBody無法處理這種格式的資料
屬性:required: 是否必須,預設是true,表示請求中一定要有對應的參數,否則會拋出例外值
範例:通常使用此註解前端都是傳送ajax請求,那麼請求部分內容如下:

         $.ajax({
           type: "POST",
           url:"/role/saveRole",
           contentType:"application/json",
           data: JSON.stringify(_self.form)...
登入後複製

注意:contentType不可省略,data必須是透過stringify轉換為json字串的資料
那麼對應方法就可以這麼寫:

@RequestMapping(value = "/saveRole",method = RequestMethod.POST)
public String saveRole(@RequestBody People requestJson) {}
登入後複製

如果前端傳遞的是物件的數組,那麼後台也可以直接使用List直接接受,這是綁定List資料最實用的方式

@CookieValue

可以把Request header中關於cookie的值綁定到方法的參數上
適用:方法參數

获取cookie中的JSESSIONID
public String index(@CookieValue("JSESSIONID") String cookie){}
登入後複製

@RequestHeader

#可以把Request請求header部分的值綁定到方法的參數上
適用:方法參數

获取请求中Accept-Encoding值,返回gzip, deflate, br
public String index(@RequestHeader("Accept-Encoding") String host){return host;}
登入後複製

@ExceptionHandler

注解在方法上,表示该方法用于处理特定的异常,处理范围是当前类,如果想要全局捕获异常,需要使用@ControllerAdvice
当一个Controller中有多个HandleException注解出现时,那么异常被哪个方法捕捉呢?这就存在一个优先级的问题
ExceptionHandler的优先级是:在异常的体系结构中,哪个异常与目标方法抛出的异常血缘关系越紧密,就会被哪个捕捉到
属性:value: 需要处理的异常类型集合(Class)
在当前Controller有两个处理异常的方法,当访问/index时,页面显示: json data

package com.rxy.controller;

@Controller
public class HelloController {
    
    @ExceptionHandler({ ArithmeticException.class })
    @ResponseBody
    public String handleArithmeticException(Exception e) {
        e.printStackTrace();
        return "json data";
    }
    
    @ExceptionHandler({ IOException.class })
    public String handleIOException(Exception e) {
        e.printStackTrace();
        //返回错误页面
        return "error";
    }

    @RequestMapping("/index")
    public String index(){
        int i = 10 / 0;
        return "index";
    }

}
登入後複製

以上是springmvc常用5種註解的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

比較SpringBoot與SpringMVC的差異是什麼? 比較SpringBoot與SpringMVC的差異是什麼? Dec 29, 2023 am 10:46 AM

SpringBoot與SpringMVC的不同之處在哪裡? SpringBoot和SpringMVC是兩個非常流行的Java開發框架,用於建立Web應用程式。儘管它們經常分別被使用,但它們之間的差異也是很明顯的。首先,SpringBoot可以被看作是一個Spring框架的擴充或增強版。它旨在簡化Spring應用程式的初始化和配置過程,以幫助開發人

spring和springmvc有哪些差別 spring和springmvc有哪些差別 Dec 29, 2023 pm 05:02 PM

spring和springmvc的區別:1、定位和功能;2、核心功能;3、應用領域;4、擴展性。詳細介紹:1、定位和功能,Spring是一個綜合性的應用程式開發框架,提供了依賴注入、面向切面編程、事務管理等功能,旨在簡化企業級應用程式的開發,而Spring MVC是Spring框架中的一個模組,用於Web應用程式的開發,實現了MVC模式;2、核心功能等等。

SpringBoot與SpringMVC的差別是什麼? SpringBoot與SpringMVC的差別是什麼? Dec 29, 2023 pm 05:19 PM

SpringBoot和SpringMVC是Java開發中常用的兩個框架,它們都是由Spring框架所提供的,但在功能和使用方式上有一些區別。本文將分別介紹SpringBoot和SpringMVC的特點和區別。一、SpringBoot的特點:簡化配置:SpringBoot透過約定優於配置的原則,大大簡化了專案的配置過程。它可以自動配置專案所需的參數,開發人

springboot和springmvc有哪些差別 springboot和springmvc有哪些差別 Jun 07, 2023 am 10:10 AM

springboot和springmvc區別是:1、意義不同;2、配置不同;3、依賴項不同;4、開發時間不同;5、生產力不同;6、實現JAR打包功能的方式不同;7、是否提供批次處理功能;8、作用不同;9、社群和文件支援不同;10、是否需要部署描述符。

Java的SpringMVC攔截器怎麼用 Java的SpringMVC攔截器怎麼用 May 13, 2023 pm 02:55 PM

攔截器(interceptor)的作用SpringMVC的攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。將攔截器依一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在存取被攔截的方法或欄位時,攔截器鏈中的攔截器就會依其先前定義的順序被呼叫。攔截器也是AOP思想的具體實作。攔截器和過濾器區別區別過濾器(Filter)攔截器(Intercepter)使用範圍是servlet規格中的一部分,任何JavaWeb工程都可以使用是Spri

Java API 開發中使用 SpringMVC 進行 Web 服務處理 Java API 開發中使用 SpringMVC 進行 Web 服務處理 Jun 17, 2023 pm 11:38 PM

隨著網路的發展,Web服務越來越普遍。 JavaAPI作為一種應用程式接口,也不斷地推出新的版本來適應不同的應用場景。而SpringMVC作為一種流行的開源框架,能夠幫助我們輕鬆地建立Web應用程式。本文將詳細講解在JavaAPI開發中,如何使用SpringMVC進行Web服務處理,包括配置SpringMVC、編寫控制器、使用

比較SpringBoot和SpringMVC的異同點 比較SpringBoot和SpringMVC的異同點 Dec 29, 2023 am 08:30 AM

解析SpringBoot和SpringMVC之間的異同SpringBoot和SpringMVC是Java領域中非常重要的開發架構。雖然它們都屬於Spring框架的一部分,但在使用和功能上有一些明顯的區別。本文將對SpringBoot和SpringMVC進行比較,解析它們之間的異同。首先,讓我們來了解一下SpringBoot。 SpringBo

See all articles