AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

在SpringBoot項目中這幾個注解你們還用嗎?

來源: 責編: 時間:2024-07-03 17:14:35 122觀看
導讀環境:SpringBoot3.3.01. 簡介在SpringBoot應用開發中,傳統的請求屬性處理方式如@ModelAttribute,@SessionAttribute,@RequestAttribute以及RedirectAttributes似乎用的越來越少了,但是在一些特定場景下它們發揮著不可或缺

環境:SpringBoot3.3.0uDO28資訊網——每日最新資訊28at.com

1. 簡介

在SpringBoot應用開發中,傳統的請求屬性處理方式如@ModelAttribute,@SessionAttribute,@RequestAttribute以及RedirectAttributes似乎用的越來越少了,但是在一些特定場景下它們發揮著不可或缺的作用尤其是當涉及到表單提交、會話狀態管理和重定向屬性傳遞時。uDO28資訊網——每日最新資訊28at.com

  • @ModelAttribute:主要用于綁定請求中的數據到方法參數或模型屬性上,常用于處理表單提交,使得復雜的對象綁定變得簡單直接。它允許你預處理傳入的數據,或者初始化一個命令對象供表單使用。
  • @SessionAttribute:用于從HttpSession中存取屬性,這對于存儲非敏感的用戶信息或臨時數據非常有用,比如用戶設置或購物車信息。
  • @RequestAttribute:處理單一請求上下文,允許你在控制器間通過HttpServletRequest傳遞自定義屬性,適合傳遞那些不需要跨請求持久化的數據。
  • RedirectAttributes:是在執行重定向操作時用來傳遞閃存屬性的利器,這些屬性在重定向后的一次請求中可用,之后自動移除,非常適合于向用戶展示操作成功或失敗的消息,同時保持URL的干凈。

接下來將詳細接上上面幾個注解及類的使用。uDO28資訊網——每日最新資訊28at.com

2. 實戰案例

2.1 @ModelAttribute

該注解可用于方法參數及方法上;uDO28資訊網——每日最新資訊28at.com

用于方法參數

@GetMapping("/product/{cateId}/{id}")public ProductDTO test(@ModelAttribute ProductDTO dto) {  return dto ;}

圖片圖片uDO28資訊網——每日最新資訊28at.com

首先,SpringMVC會自動將請求URI中的占位符數據綁定到當前ProductDTO對象上,這個綁定與@ModelAttribute注解沒有關系。而這里注解的作用是將當前ProductDTO對象綁定到模型數據中,接下來如果你使用的thymeleaf則可以直接在頁面中訪問,如下示例:uDO28資訊網——每日最新資訊28at.com

@GetMapping("/product/{cateId}/{id}")public String test(@ModelAttribute ProductDTO dto) {  return "modelattribute" ;}

在頁面中直接訪問ProductDTO;uDO28資訊網——每日最新資訊28at.com

<div th:if="${productDTO}">  <ul>    <li>cateId: <a th:text="${productDTO.cateId}"></a></li>    <li>id: <a th:text="${productDTO.id}"></a></li>  </ul></div>

頁面顯示

圖片圖片uDO28資訊網——每日最新資訊28at.com

在上面你看到了,默認訪問的key是當前類型的首字母改為小寫,我們可以通過配置屬性修改默認keyuDO28資訊網——每日最新資訊28at.com

public String test(@ModelAttribute("dto") ProductDTO dto)

這樣在頁面中訪問的key將是:dto。uDO28資訊網——每日最新資訊28at.com

用于方法

@GetMapping("/product/{cateId}/{id}")public String test() {  return "modelattribute" ;}@ModelAttribute("dto")public ProductDTO dto(ProductDTO dto) {  System.out.println("dto....") ;  return dto ;}

將注解用于方法上后,當前的Controller中的所有接口都會先執行該方法將請求中的參數信息綁定到ProductDTO對象中,最后將該dto綁定到模型數據上。通過上面的配置你在頁面上一樣也可以訪問該對象數據。uDO28資訊網——每日最新資訊28at.com

2.2 @SessionAttribute

該注解只能用于方法參數上。uDO28資訊網——每日最新資訊28at.com

該注解的作用用于讀取session中的數據到當前的參數中,如下示例:uDO28資訊網——每日最新資訊28at.com

@GetMapping("/user")@ResponseBodypublic User user(@SessionAttribute("user") User user) {  return user ;}// 模擬登錄后將User對象存入Session中@GetMapping("/login")@ResponseBodypublic String login(HttpSession session) {  session.setAttribute("user", new User(666L, "Admin")) ;  return "login success" ;}

這里會讀取Session中key=user的數據到當前User對象中,你需要先登錄,然后再訪問/user接口。uDO28資訊網——每日最新資訊28at.com

如果session中沒有user,那么程序將會報錯uDO28資訊網——每日最新資訊28at.com

圖片圖片uDO28資訊網——每日最新資訊28at.com

錯誤提示,session對象中沒有user屬性。通過如下方式設置不是必須的;uDO28資訊網——每日最新資訊28at.com

public User user(@SessionAttribute(value = "user", required = false) User user)

也可以將參數設置為Optional;uDO28資訊網——每日最新資訊28at.com

public User user(@SessionAttribute("user") Optional<User> user)

通過上面2中方式設置,在Session中不存在對應的屬性時也不會報錯。uDO28資訊網——每日最新資訊28at.com

注:還有一個@SessionAttributes注解,該注解可以用于類上。uDO28資訊網——每日最新資訊28at.com

2.3 @RequestAttribute

該注解同樣只能用于方法參數上。uDO28資訊網——每日最新資訊28at.com

與 @SessionAttribute 類似,你也可以使用 @RequestAttribute 注解來訪問先前創建的請求屬性(例如,由 Servlet Filter或 HandlerInterceptor 創建的屬性),如下示例:uDO28資訊網——每日最新資訊28at.com

先定義一個Filter,該Filter作用是向Request中設置值;uDO28資訊網——每日最新資訊28at.com

@Componentpublic class UserFilter extends OncePerRequestFilter {  @Override  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)      throws ServletException, IOException {    request.setAttribute("user", new User(888L, "Guest")) ;    filterChain.doFilter(request, response) ;  }}

接下來在Controller中通過@RequestAttribute訪問user屬性。uDO28資訊網——每日最新資訊28at.com

@GetMapping("/user")@ResponseBodypublic User user(@RequestAttribute("user") Optional<User> user) {  return user.orElse(new User()) ;}

圖片圖片uDO28資訊網——每日最新資訊28at.com

與@SessionAttribute一樣,參數可以通過Optional設置不是必須的。uDO28資訊網——每日最新資訊28at.com

2.4 RedirectAttributes

當頁面通過redirect進行跳轉時,可以通過該類定義在接口方法參數中,將數據保存到該對象中后,你就可以在調整到的頁面中使用配置的屬性了,如下示例:uDO28資訊網——每日最新資訊28at.com

@GetMapping("")public String index(RedirectAttributes ra) {  // 將你需要的數據存入該對象中  ra.addFlashAttribute("message", "hello") ;  // redirect其它頁面  return "redirect:/page/tm" ;}@GetMapping("tm")public String tm(RedirectAttributes ra) {  return "test" ;}

test.html頁面如下:uDO28資訊網——每日最新資訊28at.com

<body>  <h1>Test Page</h1>  <div th:if="${message}">    <h2 th:text="${message}" />  </div></body>

訪問上面的/page,將redirec到最終的test.html頁面;uDO28資訊網——每日最新資訊28at.com

圖片圖片uDO28資訊網——每日最新資訊28at.com

redirect過來后我們可以訪問到配置的數據。uDO28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-98547-0.html在SpringBoot項目中這幾個注解你們還用嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 變量命名的藝術:五分鐘速成秘籍

下一篇: C++ this 指針到底是個什么特殊的指針

標簽:
  • 熱門焦點
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 三星獲批量產iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續在今年9月舉辦一年一度的秋季新品發布會,有傳言稱發布會將于9月12日舉行,屆時全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 自研Exynos回歸!三星Galaxy S24系列將提供Exynos和驍龍雙版本

    年初,全新的三星Galaxy S23系列發布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三個版本,全系搭載超頻版驍龍8 Gen 2,雖同樣采用臺積電4nm工藝制
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top