Tôi có ứng dụng web Servlet 3.0 sử dụng cả Spring và Jersey. Tôi hiện đã thiết lập nó bằng cách sử dụng SpringServlet được cấu hình như một bộ lọc trong tệp web.xml và các lớp tài nguyên được chú thích với cả hai @Path
và @Component
. Dưới đây là đoạn mã web.xml:Cách định cấu hình Jersey bằng Spring chỉ sử dụng chú thích
<filter>
<filter-name>jersey-serlvet</filter-name>
<filter-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</filter-class>
<init-param>
<param-name>
com.sun.jersey.config.property.packages
</param-name>
<param-value>com.foo;com.bar</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Thiết lập này hoạt động, nhưng tôi thực sự muốn thiết lập chỉ với chú thích - không có cấu hình web.xml. Nỗ lực đầu tiên của tôi là xóa cấu hình SpringServlet ở trên và tạo một lớp mở rộng Application
. Dưới đây là một đoạn rằng:
@ApplicationPath("/*")
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.foo;com.bar");
HashMap<String, Object> settings = new HashMap<String, Object>(1);
settings.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, true);
this.setPropertiesAndFeatures(settings);
}
}
này hoạt động trong đó các nguồn lực JAX-RS được đăng ký và tôi có thể nhấn họ tại URL của họ, nhưng họ ném NullPointerExceptions khi họ cố gắng và sử dụng tài sản autowired của họ ... điều này làm cho cảm giác bởi vì tôi đoán các nguồn tài nguyên hiện đang được Jersey tải và không phải là các bean được quản lý mùa xuân, do đó không có autowiring.
Mặc dù một chút công bằng tìm kiếm xung quanh tôi không thể tìm thấy bất kỳ cách nào để tải các tài nguyên Jersey như các hạt Spring chỉ với các chú thích. Có cách nào không? Tôi không thực sự muốn phải viết một loạt mã để các tài nguyên tự tìm nạp bối cảnh Spring và gọi DI nếu tôi có thể trợ giúp nó.
Nếu chú thích chỉ không hoạt động, thì tôi có thể sống với cấu hình bộ lọc trong web.xml nếu tôi có thể chỉ định lớp Application
để tải thay vì danh sách các gói cần quét. Nếu tôi có thể loại bỏ danh sách gói trong đó và chỉ cần chỉ định một cá thể lớp Application
thì tôi sẽ có nội dung.
Rõ ràng nó sẽ là tuyệt vời nếu ai đó có câu trả lời dứt khoát cho tôi nhưng tôi cũng biết ơn về bất kỳ gợi ý hay gợi ý nào về nơi tôi có thể tìm hoặc những thứ để thử.
Cảm ơn, Matt
Cám ơn câu trả lời của bạn, nhưng tôi đang sử dụng Jersey 1 và tôi không có bất kỳ sự cố khi nhận tài nguyên Jersey được tải và chạy. Vấn đề là tôi muốn họ quản lý bởi Spring vì vậy tôi nhận được autowiring. – Doughnuts
Ok, trong trường hợp đó, đây không phải là giải pháp cho bạn. Nhưng chỉ để được rõ ràng: điều này cho phép mùa xuân autowiring. – rustyx