0

다음을 사용 @RequestHeader 값을받는 방법 나의 방법이다 : 나는 다음과 같은 세부 사항 자바 - - 반사 반사

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) 

나는 위의 사항과 같은 수를 얻을 수 있어요하는

@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); 
     } 
    } 

다음과 같은 방법으로

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 내가 사용하고

봄 그것을 해결하는 방법입니다 이렇게하려면 :

이 작업을 도와주세요.

감사

답변

2

@RequestHeader이 경우 매개 변수 레벨의 주석이다. 그것을 얻으려면 Method.getParameterAnnotations()을 사용해보십시오.

편집

예 : 다음 다른 곳

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

    } 
} 

그리고 항상에 시간이 필요한 경우에도 요구하는 모든 사항에 대한 지원 @NilsH에

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 
+0

감사 NilsH, 당신은 시작하는 몇 가지 코드를 줄 것이다 : 나는 그것을 해결하지만 난이 일을 봄 사용한

프로그램이 디버그 모드에있는 경우 정보가 얼마나 자신이다 부디? –

+0

@Anto 애플리케이션에 적응할 수 있어야하는 예제를 추가했습니다. – NilsH

+0

자세한 게시물 NilsH :) +1. 나는 당신의 방법을 지금 시도하고있다, 다른 사람을 역시 도울 것이다 그래야 한 번 그것을 표시 할 것이다. –

0

감사합니다 쓸모가있다 :

t

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

나는 다른 사람들에게도 도움이 될지도 모른다는 생각으로 여기에 게시했습니다. :) –