簡體   English   中英

檢查 controller 是否動態具有@RequestHeader(在測試中)

[英]Check if a controller has a @RequestHeader dynamically (in a test)

使用 SpringBoot,我設法使用RequestMappingHandlerMapping動態(在測試中)獲取所有控制器的列表,但我無法檢查 controller 是否使用 @RequestHeader("language") 。 有沒有辦法檢索這些信息? 我認為RequestMappingHandlerMapping不可能。

謝謝。

public void randomApi(@PathVariable("user") String user,
                      @RequestHeader("language") String language){...}

RequestMappingHandlerMapping代表所有 controller 方法,您必須首先從中獲取您感興趣的特定 controller 方法。 最簡單的方法是首先為 controller 方法命名,例如GetRandomApi

@GetMapping(name = "GetRandomApi" , value= "/random")
public void randomApi(@PathVariable("user") String user, @RequestHeader("language") String language){

}

然后通過此名稱獲取 controller 方法:

HandlerMethod hm = mapping.getHandlerMethodsForMappingName("GetRandomApi").get(0);

請注意HandlerMethod代表 controller 方法,我假設您只有一個具有此名稱的 controller 方法。

要檢查此 controller 方法是否具有使用@RequestHeader注釋的參數,您可以執行以下操作:

for( MethodParameter param : hm.getMethodParameters()){     
        RequestHeader requestHeader = param.getParameterAnnotation(RequestHeader.class);
        if(requestHeader != null) {
            System.out.println(String.format("parameter index %s is annotated with @RequestHeader with the value %s", 
            param.getParameterIndex(), 
            requestHeader.value()));
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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