Этот вопрос был задан несколько раз before, однако ответы, похоже, не работают, и/или Джерси перешел с новыми изменениями.Как комментировать JAX-RS на интерфейсе при использовании Джерси
Я просматриваю некоторые API REST, используя JAX-RS и Jersey (версия 2.24). И я хочу аннотировать интерфейс с JAX-RS и конкретную реализацию (без каких-либо аннотаций). Однако с this patch Джерси прекратил поддерживать эту возможность. Насколько я понимаю, spec, он строго не запрещает это делать.
Если подкласс или метод реализации имеет какие-либо JAX-RS аннотаций, то все аннотации на суперкласса или метод интерфейса игнорируются.
подразумевая, что это вполне нормально. Во многих случаях полезно использовать интерфейс, и каждый сервер и клиент имеют свои соответствующие реализации.
Есть много решений там,
- Используйте
ResourceConfig
и сделатьregisterClasses(MyImplementation.class)
. Однако это не работает. - Отключите конфигурацию сканирования пакета в
web.xml
, создайте пользовательскийjavax.ws.rs.Application
и выполнитеregister
вашей реализации. Не работает. - используйте
ResourceConfig
и определите обычайAbstractBinder
и сделайтеbind
, чтобы инъекция зависимости Джерси могла найти конкретные реализации. Не работает. - Используйте RESTEasy. RESTEasy, похоже, не вводит ограничения интерфейса, как в Джерси. Никогда не пробовал это сам.
Я был бы признателен, если бы кто-то мог поделиться своим опытом с этим. Любая помощь в том, как получить работу Джерси, тоже будет отличной. Что касается опции (4), действительно ли нужно переключиться? Пример кода ниже.
MyResource
package com.foo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/hello")
public interface MyResource {
@GET
public String sayHello();
}
MyResourceImpl
package com.bar;
public class MyResourceImpl implements MyResource {
@Override
public String sayHello() {
return "Hello Jersey";
}
}
Также есть web.xml
, который имеет сканирования пакетов с поддержкой сканирования com.foo
Не работает ли этот класс класса '@ Path' на конкретном классе вместо интерфейса. Так я всегда знал, что он работает (как описано в спецификации JAX-RS). Я даже не знал, что интерфейс интерфейса anno используется для поддержки. –
@dur да, cxf или resteasy могут поддержать это. Я считаю, что трикотаж намного проще настроить, чем cxf. – user30622
@peeskillet работает с аннотацией '@ Path' на конкретном классе. Но это побеждает цель использования интерфейса в моем случае. Клиент и сервер должны использовать один и тот же путь API.И с вашим решением я закончу дублирование путей для клиента (мой клиент - код, сгенерированный javascript из спецификации swagger) – user30622