动态检查控制器是否具有@RequestHeader(在测试中)
Check if a controller has a @RequestHeader dynamically (in a test)
使用 SpringBoot,我设法使用 RequestMappingHandlerMapping
动态(在测试中)获取所有控制器的列表,但我无法检查控制器是否使用 @RequestHeader("language")。有没有办法检索这些信息?
我认为 RequestMappingHandlerMapping
.
不可能
谢谢。
public void randomApi(@PathVariable("user") String user,
@RequestHeader("language") String language){...}
RequestMappingHandlerMapping
代表所有控制器方法,你必须先从中获取你感兴趣的特定控制器方法。最简单的方法是首先为控制器方法命名,例如 GetRandomApi
:
@GetMapping(name = "GetRandomApi" , value= "/random")
public void randomApi(@PathVariable("user") String user, @RequestHeader("language") String language){
}
然后通过此名称获取控制器方法:
HandlerMethod hm = mapping.getHandlerMethodsForMappingName("GetRandomApi").get(0);
请注意 HandlerMethod
代表一个控制器方法,我假设您只有一个控制器方法具有此名称。
要检查此控制器方法是否具有用 @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()));
}
}
使用 SpringBoot,我设法使用 RequestMappingHandlerMapping
动态(在测试中)获取所有控制器的列表,但我无法检查控制器是否使用 @RequestHeader("language")。有没有办法检索这些信息?
我认为 RequestMappingHandlerMapping
.
谢谢。
public void randomApi(@PathVariable("user") String user,
@RequestHeader("language") String language){...}
RequestMappingHandlerMapping
代表所有控制器方法,你必须先从中获取你感兴趣的特定控制器方法。最简单的方法是首先为控制器方法命名,例如 GetRandomApi
:
@GetMapping(name = "GetRandomApi" , value= "/random")
public void randomApi(@PathVariable("user") String user, @RequestHeader("language") String language){
}
然后通过此名称获取控制器方法:
HandlerMethod hm = mapping.getHandlerMethodsForMappingName("GetRandomApi").get(0);
请注意 HandlerMethod
代表一个控制器方法,我假设您只有一个控制器方法具有此名称。
要检查此控制器方法是否具有用 @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()));
}
}