我正在开发一个RESTful服务项目。我有模块作为Web层,业务层等。我添加了基本的api层(使用泽西),我获得了get请求的基本响应。现在我必须将它连接到业务层。我在谷歌搜索,但我不知道如何实现我的项目的每个解决方案。
这是我的旅行资源类:
@Path("trip")
public class TripResource {
@Context
private UriInfo context;
@Inject
private AdminService adminService;
public TripResource() {
}
@GET
@Produces("text/plain")
public List<TripDTO> getText() {
return adminService.listAllTrips();
}
}
这用于添加资源类:
@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(cz.infi.javatravelagency.ServiceResource.class);
resources.add(cz.infi.javatravelagency.TripResource.class);
}
}
我的pom.xml:
<name>JavaTravelAgency - Api module</name>
<dependencies>
<dependency>
<groupId>cz.infi</groupId>
<artifactId>javatravelagency-business</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Java language version -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
<!-- Servlet 3.0 without web.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
我试图关注answer in this link。我刚补充说:
public class MyApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(AdminServiceImpl.class).to(AdminService.class);
}
}
现在我被卡住了。
如何将此活页夹添加到我的配置类? 没有使用任何其他技术,最简单的实施是什么?
答案 0 :(得分:10)
这也花了我很多时间。
尝试以下方法:
在这里,您必须将绑定添加到业务逻辑中。 你已经有了这个(只是为了完整而添加)。
即克。
public class MyBinder extends AbstractBinder {
@Override
protected void configure() {
// request scope binding
bind(MyInjectablePerRequest.class)
.to(MyInjectablePerRequest.class)
.in(RequestScope.class);
// singleton binding
bind(MyInjectableSingleton.class).in(Singleton.class);
// singleton instance binding
bind(new MyInjectableSingleton()).to(MyInjectableSingleton.class);
}
}
然后在项目中添加“ResourceConfig”类并在此处注册您的活页夹:http://sleeplessinslc.blogspot.de/2012/10/jax-rs-20-jersey-20-preview-example.html
在您的情况下,您可以简单地从ResourceConfig而不是ApplicationConfig扩展您的ApplicationConfig(这就是我所做的)。在“getClasses()”中注册的所有类应该如下所述。
即克。
/**
* Application config
*/
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
register(SomeResources.class, SomeProviders.class);
// Register different Binders
addBinders(new MyBinder());
}
}
至少确保您的web.xml使用配置。这取决于您的设置(glassfish,servlet v1 / v2等)
由于您已经在使用ApplicationConfig类,很可能已经使用了正确的设置。
这里再举一个例子:
<servlet>
<servlet-name>om.example.package.to.your.config.ApplicationConfig</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.example.package.to.your.config.ApplicationConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
希望这会有所帮助;)
此致 本
现在发现一个类似的帖子: Dependency injection with Jersey 2.0
答案 1 :(得分:-6)
您需要向Jersey注册您的资源类。因此,如果您的应用程序名为MyApplication
,那么您可以执行
public class MyApplication extends ResourceConfig {
/*Register JAX-RS application components.*/
public MyApplication () {
register(TripResource.class);
}
}
同样在web.xml
文件中,将MyApplication
添加到servlet容器中:
<servlet>
<servlet-name>SpringApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>mypackage.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
可以找到使用Jersey和Spring DI的简单示例here。