自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringBoot中Controller接口參數(shù)還可以這樣玩?

開(kāi)發(fā) 前端
指定在發(fā)生重定向時(shí)使用的屬性(即要附加到查詢(xún)字符串中的屬性)以及要在重定向請(qǐng)求期間臨時(shí)存儲(chǔ)的屬性。

環(huán)境:SpringBoot3.2.5

1. Optional包裝參數(shù)

請(qǐng)求參數(shù)通過(guò)java.util.Optional包裝

@GetMapping("/optional")
public Object optional(Optional<String> name) {
  return String.format("請(qǐng)求參數(shù): %s", name.orElse("")) ;
}

通過(guò)Optional接受參數(shù),效果等同于

public Object optional(@RequestParam(required=false) String name){}

與將required設(shè)置為false效果一樣(@RequestHeader同樣)

2. 便捷獲取Servlet API

在請(qǐng)求參數(shù)中你可以使用WebRequest, NativeWebRequest兩個(gè)任意對(duì)象來(lái)獲取Request,Response,Session等對(duì)象。

@GetMapping("/servlet/api")
public Object servletApi(WebRequest request, NativeWebRequest webRequest) {
  String name = request.getParameter("name") ;
  // 獲取Servlet API
  HttpServletRequest req = webRequest.getNativeRequest(HttpServletRequest.class) ;
  HttpServletResponse resp = webRequest.getNativeResponse(HttpServletResponse.class) ;
  HttpSession session = webRequest.getNativeRequest(HttpSession.class) ;
  return "servlet api" ;
}

當(dāng)然你可以直接寫(xiě)你需要的具體對(duì)象

public Object servletApi(HttpServletRequest req, 
  HttpServletResponse resp) {
  // ...
}

NativeWebRequest本身提供了很多通用的方法,并且還可以獲取其它對(duì)象,使用起來(lái)更加方便。

3. 獲取當(dāng)前認(rèn)證用戶(hù)

你的請(qǐng)求參數(shù)還可以使用java.security.Principal該對(duì)象用來(lái)獲取當(dāng)前請(qǐng)求中已經(jīng)認(rèn)證過(guò)的用戶(hù)信息。這尤其在使用Spring Security時(shí)非常有用,在Security中的Authentication接口實(shí)現(xiàn)了Principal。

@GetMapping("/principal")
public Object principal(Principal principal) {
  return principal ;
}

輸出如下:

圖片圖片

4. 獲取請(qǐng)求其它信息

你還可以非常方便的獲取當(dāng)前請(qǐng)求Method及Locale等信息。

@GetMapping("/other")
public Object other(HttpMethod method, Locale locale) {
  return method.name() + ", " + locale.toString() ;
}
// 輸出
GET, zh_CN

除此之外,你還可以獲取時(shí)區(qū)信息java.util.TimeZone, java.time.ZoneId。

5. 讀取輸入流

將請(qǐng)求body中的內(nèi)容以流InputStream形式獲取。

@PostMapping("/inputStream")
public Object inputStream(InputStream is) throws Exception {
  return String.format("讀取到內(nèi)容: %s", 
    StreamUtils.copyToString(is, StandardCharsets.UTF_8)) ;
}

輸出結(jié)果:

圖片圖片

6. 獲取Header&Body

通過(guò)HttpEntity獲取請(qǐng)求header及body內(nèi)容信息;

@PostMapping("/httpentity")
public Object httpentity(HttpEntity<String> entity) {
  return Map.of(
    "headers", entity.getHeaders(), 
    "body", entity.getBody()
  ) ;
}

輸出結(jié)果:

圖片圖片

7. 獲取當(dāng)前請(qǐng)求URI

如果你想獲取當(dāng)前請(qǐng)求的Schema,Host,Port,上下文,那么你可以通過(guò)如下參數(shù)獲取

@GetMapping("/uri")
public Object uri(UriComponentsBuilder builder) {
  return builder.toUriString() ;
}

輸出結(jié)果:

http://localhost:9001/api。

只包含了schema://host:port/context

8. 獲取請(qǐng)求的部分

如果你的請(qǐng)求是multipart/form-data,那么你可以通過(guò)如下方式獲取部分請(qǐng)求信息

@PostMapping("/requestpart")
public Object requestpart(@RequestPart("user") String user) {
  return user ;
}

請(qǐng)求結(jié)果:

圖片圖片

你還可以以JSON對(duì)象讀取,如下:

public Object requestpart(@RequestPart("user") User user)

注意,對(duì)象接受時(shí),你需要設(shè)置每part的Content-Type

Content-Type: multipart/mixed


--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
Content-Disposition: form-data; name="user"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit


{
  "age": 20,
  "name": "張三"
}

沒(méi)有設(shè)置Content-Type將會(huì)拋出415錯(cuò)誤。

9.重定向保存屬性

指定在發(fā)生重定向時(shí)使用的屬性(即要附加到查詢(xún)字符串中的屬性)以及要在重定向請(qǐng)求期間臨時(shí)存儲(chǔ)的屬性。

@PostMapping("/")
public String handleFileUpload(RedirectAttributes redirectAttributes) {
  // 重定向后能夠獲取到這里指定的屬性信息
  redirectAttributes.addFlashAttribute("message", "You successfully uploaded file!");
  // 重定向
  return "redirect:/";
}

通過(guò)該種方式,重定向后頁(yè)面中也能獲取設(shè)置的屬性信息。

責(zé)任編輯:武曉燕 來(lái)源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2024-08-06 09:51:21

SpringHTTPJSON

2024-08-02 08:38:20

Controller接口地址

2019-01-29 10:00:59

GitHub開(kāi)源搜索

2024-05-17 09:37:26

format屬性Spring

2024-12-03 09:45:34

2021-03-03 08:05:53

C++項(xiàng)目函數(shù)

2022-09-26 07:32:24

開(kāi)發(fā)接口編程

2022-12-06 17:30:04

2022-07-30 23:45:09

內(nèi)存泄漏檢測(cè)工具工具

2016-09-29 17:48:32

騰訊云語(yǔ)音質(zhì)檢珍愛(ài)網(wǎng)

2021-02-01 13:35:28

微信Python技巧

2022-05-17 07:26:33

動(dòng)畫(huà)CSS前端

2023-07-03 16:49:47

5G

2013-09-18 10:44:01

搜狗輸入法詞語(yǔ)

2012-10-12 10:13:26

eclips代碼編寫(xiě)Editplus

2017-11-27 12:24:02

命令行代碼指令

2013-08-22 10:28:50

.NET MVC.NETRazor

2020-08-24 07:19:13

主鍵自增數(shù)據(jù)庫(kù)

2023-12-11 13:57:00

RFM模型激勵(lì)機(jī)制

2020-12-28 08:36:30

C語(yǔ)言編程泛型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)