gpt4 book ai didi

java - 泽西 (REST) 子资源 CDI

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:36:17 29 4
gpt4 key购买 nike

我正在从事一个企业项目,该项目有一个 EJB 模块和一个在 GlassFish v3.1、Weld v1.1 和 Jersey 上运行的 Web 项目。在 EJB 中,我定义了一个实体类 Manufacturer 并生成了一个 session 外观 ManufacturerFacade

在 Web 项目中,我希望通过 REST 公开 Manufacturer 实例。为此,我创建了以下资源:

ManufacturersResource 是一个容器资源,它返回存储在数据库中的所有制造商的列表。它通过注入(inject) ManufacturerFacade 并调用 findAll() 方法来实现。缩略代码:

@RequestScoped
@Path("/manufacturer")
public class ManufacturersResource {

@Inject
private ManufacturerFacade manufacturerFacade;

@GET
@Produces("application/xml")
public List<Manufacturer> getManufacturers() {
return manufacturerFacade.findAll();
}
}

这个资源还有一个子资源:

@Path("{id}")
public ManufacturerResource getManufacturer(@PathParam("id") String id) {
return ManufacturerResource.getInstance(id, manufacturerFacade);
}

ManufacturerFacade 如下所示:

public class ManufacturerResource {

@Inject
private ManufacturerFacade manufacturerFacade;

private long id;

private ManufacturerResource(String id) {
this.id = Long.parseLong(id);
}

public static ManufacturerResource getInstance(String id,) {
return new ManufacturerResource(id);
}

@GET
@Produces("application/xml")
public Manufacturer getManufacturer() {
return manufacturerFacade.find(id);
}

但是我们在不同的类中,ManufacturerResource 没有被框架实例化,因此没有注入(inject) ManufacturerFacade

我知道我可以简单地将外观从容器资源 (ManufacturersResource) 通过构造函数传递到项目资源 (ManufacturerResource) 但是否有可能以某种方式获取 DI对它们进行处理还是通过构造函数传递它是一个完美的解决方案?

谢谢!

最佳答案

您应该能够为此使用 ResourceContext 并使用 setter 传递 id。如果它不起作用,请提交错误 (http://java.net/jira/browse/JERSEY)。

@Context
private ResourceContext resourceContext;

@Path("{id}")
public ManufacturerResource getManufacturer(@PathParam("id") String id) {
ManufacturerResource r = resourceContext.getResource(ManufacturerResource.class);
r.setId(id);
return r;
}

关于java - 泽西 (REST) 子资源 CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456755/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com