【问题标题】:Jersey not inject my CDI beansJersey 没有注入我的 CDI bean
【发布时间】:2015-03-18 14:48:45
【问题描述】:

我的@Inject 不适用于我的 Web 服务 (@Path),但可以使用 @WebServlet,为什么?

我的网络服务

@Path("/autenticacao")
public class UsuarioService {

    @Inject
    private UsuarioRepository usuarioRepository;

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Response autentica(@FormParam(value = "cpf") String cpf, @FormParam(value = "senha") String senha){
        Usuario usuario = usuarioRepository.getUsuarioByCPFSenha(cpf, senha);
        return Response.status(200).entity(usuario).build();
    }

}

UsuarioRepository 接口的定义

public interface UsuarioRepository {

    public Usuario getUsuarioByCPFSenha(String cpf, String senha);

}

我对@9​​87654324@ 接口的实现

public class UsuarioRepositoryImp implements UsuarioRepository {

    @Inject
    private Connection connection;

    @Override
    public Usuario getUsuarioByCPFSenha(String cpf, String senha) {
        String SQL = "SELECT se01_cpf, se01_senha FROM se01_usuario WHERE replace(replace(se01_cpf,'.',''),'-','') = ? AND se01_senha = ?";

        Usuario usuario = null;

        try {
            PreparedStatement stmt = connection.prepareStatement(SQL);
            stmt.setString(1, cpf);
            stmt.setString(2, senha);

            ResultSet set = stmt.executeQuery();

            while(set.next()){
                String c = set.getString("se01_cpf");
                String s = set.getString("se01_senha");

                usuario = new Usuario(c, s);
            }

            set.close();
            stmt.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return usuario;
    }

}

我的字段usuarioRepository 在我的请求后为空,知道吗?

【问题讨论】:

    标签: java cdi


    【解决方案1】:

    Jersey 依赖注入基于 HK2 而不是 CDI。因此,您需要在两者之间架起一座桥梁。这就是jersey-gf-cdi 的用途:

    <dependency>
        <groupId>org.glassfish.jersey.containers.glassfish</groupId>
        <artifactId>jersey-gf-cdi</artifactId>
    </dependency>
    

    您只需要在类路径中包含该 JAR。您可以在此处查看 Jetty 的配置: https://github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/pom.xml

    以下是 CDI bean 注入 JAX-RS 资源的示例: https://github.com/astefanutti/cdeye/blob/cd6d31203bdd17262aab12d992e2a730c4f8fdbd/webapp/src/main/java/io/astefanutti/cdeye/web/BeansResource.java

    【讨论】:

    • 我正在使用 Tomcat 7,现在我在类路径中出现 jersey-gf-cdi 的其他错误.. java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/字符串;)Ljavax/ws/rs/core/UriBuilder; javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669) javax.servlet.http.HttpServlet.service( HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    • 确保您只使用一个版本的 Jersey,请参阅:stackoverflow.com/questions/23277429/exception-in-rest-jersey
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2015-04-15
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2023-03-10
    相关资源
    最近更新 更多