当前位置: 首页 > 知识库问答 >
问题:

无法在拦截器上使用服务 [重复]

鲁景山
2023-03-14

我在Spring上有一个拦截器,可以拦截用户的请求。我想计算申请的持续时间并保存到数据库中。然而,Spring不会自动连接我的豆子,导致服务上的空点异常。

这是代码:

import java.time.Duration;
import java.time.ZonedDateTime;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
 
/**
 *
 * @author Shadows
 */
@Component
public class Interceptador implements HandlerInterceptor {
 
    @Autowired
    LogService service;
 
    public Interceptador() {
    }
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 
        //Create the log
        Log log = new Log();
 
        //Catch the URI the user is trying to access
        log.setPath(request.getRequestURI());
 
        //Set the log to request attr
        request.setAttribute("log", log);
 
        //
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
 
        //Retrieve the log
        Log log = (Log) request.getAttribute("log");
 
        //Calculate the time of the requisition
        log.setDuracao(Duration.between(log.getDataCriacao(), ZonedDateTime.now()));
 
        //java.lang.NullPointerException:
        service.save(log);
        
        System.out.println(log.getDuracao());
 
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }

我如何避免这个NPE?

共有1个答案

葛驰
2023-03-14

您需要注册您的间歇器。

这是一个有答案的相同问题:无法在HandlerInterceptorAdapter中自动连接服务

这是链接到贝尔东的例子:https://www.baeldung.com/spring-mvc-handlerinterceptor

 类似资料:
  • 我需要使用拦截器验证并记录grpc服务请求的一些数据。我检查了ServerInterceptor的interceptCall,但找不到获取请求对象的方法。有没有办法让请求对象进入拦截器?

  • 我尝试用java制作一个discord patchbot(数据位于动态网站上)。而应用程序在eclipse中工作,并作为。在我的桌面上,我无法让它在服务器上正常工作。服务器是sparkedhost的java服务器。 每次启动时,都会发生以下错误:

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 我正在使用Spring并试图用AspectJ编写示例应用程序。我需要学习如何拦截静态方法调用。在我的示例中,我尝试截取main方法,如下所示: Spring配置文件: 主要方法: 协会本身: 但是当我运行应用程序时,唯一的字符串正在打印。

  • 1. 前言 拦截器这个名词定义的非常形象,就像导弹要攻击目标的时候,可能会被先进的反导系统拦截,此处的反导系统就是一种拦截器。 我们开发的应用,对外暴露的是控制器中定义的 API 方法,我们可以在 API 方法的外围放置拦截器,所有对 API 的访问都可以通过拦截器进行过滤。 OK,那么这样的拦截有什么意义吗,其实已经很明显了,反导系统可以保护目标的安全并识别对目标的攻击行为。同理,拦截器可以跟踪

  • 问题内容: 我尝试了一些来自hibernate 4.0拦截器的 代码,该代码为使用会话级拦截器提供了以下代码: 但是,我同时检查了hibernate-core 4.0源代码和onliehibernate 4.0 java- doc ,该类没有方法,但是hibernate 3.6 java- doc确实具有此方法。 有人知道该方法移到哪里吗?如果已弃用,为什么文档仍将其保留在教程文档中?在4.0中如