gpt4 book ai didi

java - JAVA中子资源依赖问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:50 25 4
gpt4 key购买 nike

当我创建子资源时,我的注入(inject)(authenticatedUser)为空。但在根类(authenticatedUser)中,注入(inject)具有正确的值。因此,当我使用

/medicos/me

我得到了正确的值,但是当我使用时

/medicos/me/pacientes

我从子资源PacienteResource 中的authentiatedUser 收到错误null。我不明白以及如何解决子资源中的这种依赖性。此依赖项(authenticatedUser)是在身份验证过滤器中生成的。

@Path("/medicos")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MedicoResource {

@Inject
@AuthenticatedUser
Usuario authenticatedUser;

@GET
@Path("me")
@Produces(MediaType.TEXT_PLAIN)
public Response getMedico() {
return Response.ok(authenticatedUser.getMedico().getNombre()).build();
}

@Path("/me/pacientes")
public PacienteResource getMedicoPacientes() {
System.out.println("get medico pacientes");
return new PacienteResource();//This is the problem.
}
}

子资源类也有authentiatedUser,但是当我使用它时,它是空的。

public class PacienteResource {

@Inject
@AuthenticatedUser
private Usuario authenticatedUser;

@Inject
PacienteService pacienteService;

@GET
@RolesAllowed({"MEDICO"})
public Set<Paciente> getPacientes() {
Set<Paciente> pacientes = authenticatedUser.getMedico().getPacienteSet();
return pacientes;
}
}

这是我的 @AuthenticatedUser 制作人。过滤器“Authentification”抛出一个事件,为此观察者“handleAuthenticationEvent”。然后,当我需要一个authentiatedUser时,我只应该注入(inject)一个@AuthenticatedUser。但是当我创建 pacienteResource 的新实例时,不会生成 AuthenticatedUser。

@RequestScoped
public class AuthenticatedUserProducer {

@Inject
private UsuarioService usuarioService;

private Usuario authenticatedUser;

public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
this.authenticatedUser = findUser(username);
}

private Usuario findUser(String username) {
Usuario usuario = usuarioService.findByUserName(username);
return usuario;
}

@Produces
@RequestScoped
@AuthenticatedUser
public Usuario createLogger() {
return authenticatedUser;
}
}

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER})
public @interface AuthenticatedUser {

}

最佳答案

我通过这种方式找到了解决方案:我注入(inject)对象而不是在运行时创建新实例。我不太明白这是如何工作的,但这是有效的。

@Path("/medicos")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MedicoResource {

@Inject//Injection instead of create a new instance.
PacienteResource pacienteResource;

@Inject
@AuthenticatedUser
Usuario authenticatedUser;

@GET
@Path("me")
@Produces(MediaType.TEXT_PLAIN)
public Response getMedico() {
return Response.ok(authenticatedUser.getMedico().getNombre()).build();
}

@Path("/me/pacientes")
public PacienteResource getMedicoPacientes() {
return PacienteResource;// Problem solved.
}
}

关于java - JAVA中子资源依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507372/

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