成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Controller接口還能這樣玩,你會玩了嗎?

開發 前端
當前環境使用了Spring Security。你可以直接在參數中獲取SecurityContext對象,也可以獲取當前安全上下文的任何關聯對象,比如獲取當前登錄人的name或者獲取角色信息等。

環境:SpringBoot3.2.5

1. 自己控制輸出內容

接口參數可以直接使用OutputStream或Writer類型的參數,這樣你的接口可以不用有任何的返回值,直接通過這2個對象進行輸出內容,如下示例:

@GetMapping("/index")
public void index(OutputStream os, HttpServletResponse response) throws Exception {
  response.setContentType("text/plain;charset=utf-8") ;
  os.write("中國????".getBytes()) ;
}

輸出結果

圖片圖片

2. 自行讀取請求body

當你需要自己解析處理請求body內容時,你可以將參數定義為InputStream或Reader類型,如下示例:

@PostMapping("/index")
public void index(InputStream is, HttpServletResponse response) throws Exception {
  response.setContentType("application/json;charset=utf-8") ;
  StringBuilder sb = new StringBuilder() ;
  String line = null ;
  InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8) ;
  BufferedReader br = new BufferedReader(isr) ;
  while ((line = br.readLine()) != null) {
    sb.append(line) ;
  }
  response.getWriter().println(sb.toString()) ;
}

輸出結果:

圖片圖片

3. 表達式參數

通常接口參數都是用來接收用戶輸入的數據,不過你還可以將參數值"固定"了,通過@Value注解來獲取配置的數據信息,如下示例:

@GetMapping("/index")
public Object index(
  @Value("${pack.controller.params.version:}") String version) {
  return version ;
}

配置文件

pack:
  controller:
    params:
      version: 1.0.1

輸出結果:

圖片圖片

即便請求參數中有version參數值也不會影響接口。

你甚至還可以使用SpEL表達式

@GetMapping("/spel")
public Object spel(@Value("#{systemProperties['java.home']}") String javaHome) {
  return javaHome ;
}

輸出結果:

圖片圖片

4. body與header一起獲取

如果你不僅要獲取請求body還希望獲取所有逇請求header信息,那么你可以將參數類型定義為HttpEntity類型,如下示例:

@PostMapping("/index")
public Object index(HttpEntity<User> entity) {
  System.out.printf("headers: %s%n", entity.getHeaders()) ;
  return entity.getBody() ;
}
public static record User(Long id, String name) {
}

請求:

圖片圖片

控制臺輸出:

圖片圖片

5. 從當前安全上下文中獲取指定數據

這需要你當前環境使用了Spring Security。你可以直接在參數中獲取SecurityContext對象,也可以獲取當前安全上下文的任何關聯對象,比如獲取當前登錄人的name或者獲取角色信息等,如下示例:

@GetMapping("/name")
public Object name(
  @CurrentSecurityContext(expression = "authentication.name") String name) {
  return name ;
}

這里將獲取當前登錄用戶的name屬性值。

注:@CurrentSecurityContext注解從5.2版本才有的。

通過如下表達式還能獲取當前的角色信息

@CurrentSecurityContext(expression = "authentication.authorities")

當然你也可以直接獲取當前的上下文對象

@CurrentSecurityContext SecurityContext context

不添加表達式屬性即可獲取當前安全上下文對象。

圖片圖片

獲取角色信息。

6. 特殊的Map參數

你可以在參數中直接定義Map集合對象;而它并非是從請求中獲取所有的參數添加到Map,而是從模型屬性中獲取,如下示例:

// 由該注解來接收用戶請求的參數
@ModelAttribute("user")
public User init(User user) {
  return user ;
}
@GetMapping("/index")
public Object index(Map<String, Object> map) {
  // 獲取用戶輸入的參數
  return map.get("user") ;
}

輸出結果

圖片圖片

這里Map填充的是由@ModelAttribute標注方法設置的值。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-08-02 08:38:20

Controller接口地址

2020-11-16 13:38:31

PostMessage

2021-07-28 06:10:47

拖拽設計器 transmat

2021-09-05 07:55:37

前端Emoji 表情

2024-06-13 08:19:08

Controller接口參數

2017-03-07 09:49:18

存儲

2024-01-30 09:21:29

CSS文字效果文字裝飾

2018-12-12 11:30:54

JavaString字符串

2021-04-09 08:23:30

Css前端加載動畫

2023-11-30 22:54:15

2023-02-26 00:00:02

字符串分割String

2020-05-22 10:00:08

數據庫數據庫設計軟件設計

2022-04-11 08:20:36

編程輔助工具GitHubCopilot

2022-11-16 08:33:29

監聽Spring監聽器

2023-04-06 06:55:24

ChatGPTGPT算力

2021-01-30 07:51:59

微信微信8.0騰訊

2023-01-30 08:46:20

GoGo1兼容性

2016-12-28 14:51:46

大數據應用

2022-10-31 08:47:21

人臉識別按鍵鍵盤

2019-11-08 10:48:07

Windows操作系統微信Windows 10
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品免费 | www.久久99| 亚洲精品国产成人 | 国产在线精品一区二区 | 在线播放亚洲 | 国产三级电影网站 | 在线播放一区二区三区 | 亚洲网址在线观看 | 波多野结衣二区 | caoporn国产精品免费公开 | heyzo在线| 激情五月综合网 | 久久99精品久久久久久秒播九色 | 亚洲综合色 | 国产一区久久久 | 欧美freesex黑人又粗又大 | 岛国av免费在线观看 | 欧美日韩国产一区二区 | 男人久久天堂 | 久久久综合| 蜜臀久久99精品久久久久野外 | 天堂va在线观看 | 一道本在线 | 成人在线视频免费播放 | av一区在线观看 | 亚洲日韩中文字幕 | 久久大| av黄色在线 | 日本午夜精品 | 日韩欧美在线视频一区 | 91福利在线观看视频 | 天堂一区 | 中文字幕免费视频 | 久久国产亚洲 | 四虎成人精品永久免费av九九 | 91视频中文 | 81精品国产乱码久久久久久 | 亚洲天堂久久 | 亚洲精品2 | 拍真实国产伦偷精品 | 国产精品一区二区在线播放 |