gpt4 book ai didi

Java - 反射 - 如何使用反射获取@RequestHeader值

转载 作者:行者123 更新时间:2023-12-02 07:04:47 25 4
gpt4 key购买 nike

以下是我的方法:

@PreAuthorize("isAuthenticated() and hasPermission(#request, 'CREATE_REQUISITION')")
@RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition")
public @ResponseBody
void createRequisition(@RequestBody CreateRequisitionRO[] request,
@RequestHeader("validateOnly") boolean validateOnly) {
logger.debug("Starting createRequisition()...");
for (int i = 0; i < request.length; i++) {
CreateRequisitionRO requisitionRequest = request[i];

// FIXME this has to be removed/moved
requisitionRequest.setFundManager(requisitionRequest.getUserId());
// FIXME might have to search using param level as well
SystemDefault sysDefault = dbFuncs.references.systemDefault
.findByCompanyAndDivisionAndPortfolio(
userContext.getCompany(),
userContext.getDivision(),
requisitionRequest.getPortfolio());
requisitionRequest.setCustodianN(sysDefault.getCustodianN());

gateKeeper.route(requisitionRequest);
}
}

其中我可以获得以下详细信息

1. @RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition")
2. void createRequisition(@RequestBody CreateRequisitionRO[] request,
@RequestHeader("validateOnly") boolean validateOnly)
(in thesecond one i am able to get the argument type like boolean etc)

我得到的上述详细信息如下:

Class cls;
cls = Class.forName(obj.getName());
Method[] method = cls.getDeclaredMethods();
for (Method method2 : method) {
RequestMapping requestMappingAnnotation = method2.getAnnotation(RequestMapping.class); // gets the method which is maped with RequestMapping Annotation
requestMappingValues = requestMappingAnnotation.value(); // to get the url value
RequestMethod[] methods = requestMappingAnnotation.method(); // to get the request method type
requestingMethod = methods[0].name();
}

以同样的方式,当我尝试获取如下所示的 @RequestHeader 时,我得到 java.lang.NullPointerException

下面是我使用的代码片段

RequestHeader requestHeader = method2.getAnnotation(RequestHeader.class);
System.out.println("requestHeader : "+requestHeader.value());

我想要获取的是@RequestHeader("validateOnly")此注释包含的值。

编辑:

感谢@NilsH,他始终支持所有提出的澄清,即使这需要花费时间:

这就是我解决它的方法但是如果程序处于 Debug模式,该信息将可用

我使用 spring 来做到这一点:

LocalVariableTableParameterNameDiscoverer lcl = new LocalVariableTableParameterNameDiscoverer();
parametersDefinedForMethod = lcl.getParameterNames(method2);
for (String params : parametersDefinedForMethod) {
System.out.println("Params : "+params);
}

请帮我完成这件事。

谢谢

最佳答案

@RequestHeader 在本例中是参数级别注释。尝试使用Method.getParameterAnnotations()得到它。

编辑

一个例子:

public class MyClass {
public void someMethodWithParamAnnotations(String s, @MyAnnotation String s2) {

}
}

然后到其他地方

Method m = MyClass.class.getMethod("someMethodWithParamAnnotations", String.class, String.class);
Annotation[][] paramAnnotations = m.getParameterAnnotations();
Annotation[] firstParamAnnotation = paramAnnotations[0];
// Above is empty array, since first parameter has no annotation

Annotation[] secondParamAnnotation = paramAnnotations[1];
// Above contains an array with the `@MyAnnotation` annotation

关于Java - 反射 - 如何使用反射获取@RequestHeader值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com