عامل تصفية الطلب لا يعمل في Jersey 2 على Embedded Jetty
-
21-12-2019 - |
سؤال
لا أستطيع تشغيل عامل تصفية الطلب الخاص بي.أقوم بتشغيل jetty 9.1 كخادم مضمن.
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
System.out.println("HEY HO");
}
}
لقد قمت بتسجيل هذا الفصل في ResourceConfig، وحاولت أيضًا تسجيل الحزمة.لقد تم تجاهله فقط.هل هو خطأ أم أنني أفتقد شيئًا ما؟
هذه هي الطريقة التي أبدأ بها جيتي:
Weld weld = new Weld();
WeldContainer container = weld.initialize();
URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);
Server server = JettyHttpContainerFactory.createServer(baseUri, config);
(يقوم MyApplication بتوسيع ResourceConfig والمكالمات this.package(...)
و this.register(MyFilter.class)
في المنشئ.
المحلول
تكمن المشكلة في أنه لا يمكن إنشاء مثيل للفئة التي تحدد نقطة نهاية REST لأن - في حالتي - يعتمد إنشاء مثيل على العناصر التي يجب إعدادها في مرشح الطلب.
ومع ذلك، يتم إنشاء فئة نقطة النهاية قبل يسمى الفلتر .لتشغيل عامل التصفية أولاً، يجب أن يتم التعليق عليه @PreMatching
.
@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
...
}
نصائح أخرى
لتمكين الطلبات الشاملة في ملف جرة جرة محفورة ذاتيا مع خدمات بقية جيرسي (للسماح بالمكالمات من SWAGER-UI).إنشاء فئة CorsResponseFilter:
giveacodicetagpre.}
والرجوع إليها في فئة التطبيق الرئيسية الخاصة بك:
giveacodicetagpre.}
بحلول الطريقة التي يتعين علينا تضمين المرشح مع Jetty and Jersey.آمل أن يستخدم هذا الكامل.