[英]Get request header in spring boot
如何從調用我的 Springboot 應用程序的應用程序獲取當前請求的標頭和正文? 我需要提取這些信息。 不幸的是,這不起作用。 我嘗試使用此代碼示例( https://stackoverflow.com/a/26323545/5762515 )獲取當前請求:
public static HttpServletRequest getCurrentHttpRequest(){
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
return request;
}
throw new IllegalArgumentException("Request must not be null!");
}
然后我試圖得到身體
ContentCachingRequestWrapper requestWrapper = (ContentCachingRequestWrapper) currentRequest;
String requestBody = new String(requestWrapper.getContentAsByteArray());
有人能告訴我我做錯了什么嗎? 提前致謝
@RestController
public class SampleController {
@PostMapping("/RestEndpoint")
public ResponseEntity<?> sampleEndpoint(@RequestHeader Map<String, String> headers,@RequestBody Map<String,String> body) {
//Do something with header / body
return null;
}
}
如果應用程序通過休息端點進行通信,我相信這將是最簡單的解決方案。 在 spring 中,您可以將 RequestHeader 和 RequestBody 注釋添加到方法參數中,以設置它們以供使用。
當然,您可以將 RequestBody 直接映射到某個 POJO,而不是使用映射,而只是作為示例。
如果這就是您要找的,請告訴我!
@TryHard,您使用的是彈簧靴,那么以下方式對您來說更可取,
@RestController
public class SampleController {
@RequestMapping("/get-header-data")
public ResponseEntity<?> sampleEndpoint(HttpServletRequest request) {
// request object comes with various in-built methods use as per your requirement.
request.getHeader("<key>");
}
}
您可以使用代碼獲取標題,但需要應用一些更改。
private String getRequest() throws Exception {
RequestAttributes attribs = RequestContextHolder.getRequestAttributes();
if (attribs != null) {
HttpServletRequest request = ((ServletRequestAttributes) attribs).getRequest();
return request ;
}
throw new IllegalArgumentException("Request must not be null!");
}
在您可以從請求中提取標頭信息之后。 例如,如果您想獲得 Accept-Encoding
String headerEncoding = getRequest().getHeader("Accept-Encoding");
很明顯,如果沒有必要,你不會使用這個 approce。
如果你想提取身體不要使用這個解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.