System.Web.HttpUtility.UrlEncode(yourString)
добьется цели.
Учитывая аннотацию a, вам нужно вызвать annotationType (), а не getClass (), чтобы определить тип аннотации. Объект Annotation - это просто прокси, представляющий этот экземпляр аннотации в этом классе.
Object o = ...;
Class c = o.getClass();
Annotation[] as = c.getAnnotations();
for (Annotation a : as) {
// prints out the proxy class name
System.out.println(a.getClass().getName());
// prints out the name of the actual annotation
System.out.println(a.annotationType().getName());
}
Когда вы добавляете аннотации в исходный код, Java фактически создает набор интерфейсов и классов «под капотом», чтобы вы (или ваши инструменты) могли задавать программе вопросы об аннотациях, используя ограничения. Аннотации методов создают «динамические прокси», и, соответственно, Java создает для вас классы, вероятно, с именем Proxy.
Если вам это интересно, прочтите java.lang.reflect.InvocationHandler и его подтип AnnotationInvocationHandler
That как уже было сказано, вам не нужно беспокоиться о том, что на самом деле генерирует Java. Я подозреваю, что вы неправильно используете отражение для проверки ваших аннотаций из программы Java.
также .. не забудьте установить это:
@Retention(RetentionPolicy.RUNTIME)
в аннотации, чтобы она существовала за пределами компиляции.