получить путь аннотации веб-сервисов в Java - PullRequest
0 голосов
/ 21 января 2019

У меня есть вызов класса Vtiger_Services, в котором у меня много методов веб-сервисов ... Я хочу получить аннотацию для каждого веб-сервиса и сохранить его в виде строки в arraylist

пример веб-сервисовв Vtiger_Services:

    @Path("getCustomers")
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getCustomers(@HeaderParam("token") String token) {
    if (token.equalsIgnoreCase(this.token)) {
        String sql = "select * from tab1";
        Database db = new Database();
        String json = db.executeQueryTOJSON(sql);
        return json;
    } else
        return "{\"error\":\"bad token provided\"}";
}

Я хочу получить поле @ Path

Я сделал этот метод, чтобы получить имя

for(int i = 0; i < Vtiger_Services.class.getMethods().length; i++)
            {
                if(Vtiger_Services.class.getMethods()[i].getParameters().length > 0 && 
                   Vtiger_Services.class.getMethods()[i].getParameters()[0].getType().getSimpleName().equals("String") &&
                   Vtiger_Services.class.getMethods()[i].getReturnType().getSimpleName().equals("String"))
                {
                        con.createStatement().execute("INSERT INTO Services (Name) VALUES ('"+ Vtiger_Services.class.getDeclaredMethods()[i].getName()+"')");

                }                                                           
            }

1 Ответ

0 голосов
/ 21 января 2019

Вы можете использовать java refect для получения методов классов, а затем искать аннотации для этих методов.

public class Test {
    @Path("getCustomers")
    public void test() {

    }

    public static List<String> getMethodsAnnotatedWith(final Class<?> type) {
        final List<String> paths = Lists.newArrayList();
        Class<?> clazz = type;
        while (clazz != Object.class) {
            final List<Method> allMethods = new ArrayList<>(Arrays.asList(clazz.getDeclaredMethods()));
            for (final Method method : allMethods) {
                Path path = method.getAnnotation(Path.class);
                if(path != null) {
                    paths.add(path.value());
                }
            }
            // move to the upper class in the hierarchy in search for more methods
            clazz = clazz.getSuperclass();
        }
        return paths;
    }

    public static void main(String[] args) {
        System.out.println(getMethodsAnnotatedWith(Test.class));
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...