簡體   English   中英

在 Spring Boot 中獲取請求標頭

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM