0

以下は私の方法です:

@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 に感謝します。

これが私がそれを解決した方法ですbut the information will be available if the program is in debug mode

私はこれを行うために春を使用しました:

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

これを成し遂げるのを手伝ってください。

ありがとう

4

2 に答える 2

2

@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
于 2013-04-26T09:50:06.697 に答える
0

時間がかかる場合でも、常にすべての説明をサポートしてくれた @NilsH に感謝します。

これは私がそれを解決した方法ですが、プログラムがデバッグモードの場合は情報が利用可能になります

私はこれを行うために春を使用しました:

LocalVariableTableParameterNameDiscoverer lcl = 
    new LocalVariableTableParameterNameDiscoverer();
parametersDefinedForMethod = lcl.getParameterNames(method2);
for (String params : parametersDefinedForMethod) {
    System.out.println("Params : "+params);
}
于 2013-04-26T12:10:19.190 に答える