2

这是我的注释:

@RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition")

现在我想在这种情况下获取请求方法it is POST和在这种情况下的值it is /trade/createrequisition

如何在java中使用反射来做到这一点。

请帮我解决这个问题。

编辑:

这是我的实际方法:

@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) {
....
}

这就是我尝试获取@RequestiMapping 的方式:

package com.hexgen.reflection;

import java.lang.reflect.Method;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.hexgen.api.facade.HexgenWebAPI;

public class WebAPITest {
    public static void main(String[] args) {
        try {
            Class<HexgenWebAPI> clazz = HexgenWebAPI.class;
            Method methodAnnotaion = clazz.getMethod("createRequisition");
            RequestMapping methodRequestMappingAnnotation = methodAnnotaion.getAnnotation(RequestMapping.class);
            RequestMethod[] methods = methodRequestMappingAnnotation.method();
            String[] mappingValues = methodRequestMappingAnnotation.value();

            for(RequestMethod req : methods){
                System.out.println("RequestMethod : " + req);
            }

            for (String string : mappingValues) {
                System.out.println("mappingValues : " + string);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

但我得到了这个例外:

java.lang.NoSuchMethodException: com.hexgen.api.facade.HexgenWebAPI.createRequisition()
    at java.lang.Class.getMethod(Class.java:1605)
    at com.hexgen.reflection.WebAPITest.main(WebAPITest.java:12)
4

2 回答 2

2

当您尝试获取RequestMapping注释时,它可以放在类或方法中,请参阅下面的两种用法:

对于一个类YourClass

Class<YourClass> clazz = YourClass.class;
RequestMapping clazzRequestMappingAnnotation = clazz.getAnnotation(RequestMapping.class);
RequestMethod[] methods = clazzRequestMappingAnnotation.method();
String[] mappingValues = clazzRequestMappingAnnotation.value();

对于methodName类中的方法YourClass

Class<YourClass> clazz = YourClass.class;
Method method = clazz.getMethod("methodName");
RequestMapping methodRequestMappingAnnotation = method.getAnnotation(RequestMapping.class);
RequestMethod[] methods = methodRequestMappingAnnotation.method();
String[] mappingValues = methodRequestMappingAnnotation.value();
于 2013-04-12T04:40:38.033 回答
1

如果此注释在一个类上(例如:),Test那么

RequestMapping a = Test.class.getAnnotation(RequestMapping.class);
RequestMethod m = a.getMethod();
于 2013-04-12T04:32:40.670 回答