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

尝试JAVA Spring,@AutoWired Filter服务,但抛出NPE

左丘成业
2023-03-14

我的项目使用spring框架来处理http请求和响应。我请求用redis或数据库中的值替换一些参数,这些值取决于其中一个参数。

我调查的大多数相关案例都是使用过滤器来达到目的的。

例如,api有两个参数CusterName: abc, isNickName: true。我尝试实现一个类,它扩展了如下所示的OncePerrecestFilter类。

@Component("myFilter")
public class ConvertNickNameToRealNameFilter extends OncePerRequestFilter{

  @AutoWired
  private CustomerDao customerDao;

  @AutoWired
  private CustomerRepository customerRepository;

  protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

    ...
    If (isNickName){
      customerName = getRealName(customerName); 
    }
    chain.doFilter(request, response);
    ...

  }

  // repo = repository = redis
  // dao = database
  public String getRealName(String nickName){
    String realName = customerRepository.getRealName(nickName);
    if(realName == null) {
      Customer c = customerDao.findByNickName(nickName);
      if(c != null){
        customerRepository.set(nickName, c.getRealName());
        return (c == null) ? "" : c.getRealName();
      }
    }else{
      return realName;
    }
  }
}

在网上。xml

<filter>
  <filter-name>myFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>myFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

我尝试使用@AutoWired annotation注入dao和repo,但失败了。如何处理dao和repo为空?任何提示都是受欢迎的,并且有示例代码将是完美的。

谢谢你的帮助。

最后,我找到了一种方法,在filter类中使用DelegatingFilterProxy,而不是类本身。

可以看到上面的代码,这是主块。

共有1个答案

狄旭
2023-03-14

其为空的原因可能有很多。我将检查以下内容:

>

有可能这个类没有放在一个包中,而这个包不是由spring的“组件扫描过程”处理的——这样spring就不会加载它,代码是否会进入它?

如果所有内容都由spring管理,请确保存储库和过滤器没有在不同的应用程序上下文中处理

总之,我建议使用Spring mvc拦截器,而不是普通过滤器。它们与Spring MVC集成。请参阅此链接以了解它们之间的差异

 类似资料:
  • 当我尝试使用jersy api连接jaserper服务器时,抛出异常java.lang.NoSuchMethodError:org.glassfish.hk2.utilities.AbstractActiveDescriptor 下面是代码 我得到的确切异常如下 线程“main”Java . lang . nosuchmethoderror:org . glassfish . hk2 . util

  • 我开发了一个RestEasy Hello World示例,用于自我评估,但当我尝试使用JBOSS7运行此项目时。0我看到下面提到的错误的打印堆栈跟踪:请向我建议可能的解决方案,或者如果我在上述xml和java文件中编码错误,请告诉我。 下面是我写的程序 马文- 网状物xml 信息驱动。JAVA

  • 问题内容: 这是我的第一个android程序,它是一个修改过的hello世界。我在MAC上的仿真器上运行它。我尝试与.NET Web服务进行通信,但在处给出了异常。我可以从模拟器访问该站点。任何帮助表示赞赏:) 问题答案: 尝试在您的AndroidManifest.xml中添加“互联网”权限:

  • 问题内容: 我有以下活动: 我得到一个NPE,当我尝试调用的,我猜这是因为是一个独立的片段,我有作为之内: 但是,我不确定如何解决此问题,以便可以找到loginButton ID。我以前没有使用过片段,所以我意识到我可能正在使用它们/错误地实现了它们。包含在几个按钮,并没有什么,但一个。 问题答案: 从片段编写代码以初始化按钮,因为您的按钮进入片段布局而不是活动布局。 而从删除登录按钮相关的代码的

  • Googleapi版本:libs-sources/google-api-services-drive-v2-rev168-1.20.0-sources.jar java版本:“1.7.0_79”java(TM)SE运行时环境(build 1.7.0_79-B15)java HotSpot(TM)64位服务器VM(build 24.79-B02,混合模式) 还将下载的p12文件加载到\jdk1.7.

  • 问题内容: 我收到一个错误,指示缺少in 。这是我的网络服务代码: 这是我的: 添加应用程序类无效: 我仍然收到此错误: UPDATE2: 现在我从浏览器执行GET请求时收到此错误 问题答案: 用(或其他字符串)注释您的班级。