Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧截流器不工作_Java_Angularjs_Spring_Interceptor - Fatal编程技术网

Java 弹簧截流器不工作

Java 弹簧截流器不工作,java,angularjs,spring,interceptor,Java,Angularjs,Spring,Interceptor,我知道这已经被问了很多次了,但是没有一个能让我的代码正常工作。我可能做错了什么,但我不知道是什么 我将Spring Boot与AngularJS一起使用,我试图做的是预处理所有请求 这是我的代码: 控制器: @RestController @RequestMapping(value = { "/user" }) public class UserController { @RequestMapping(value = "/get", method = RequestMethod.GET

我知道这已经被问了很多次了,但是没有一个能让我的代码正常工作。我可能做错了什么,但我不知道是什么

我将Spring Boot与AngularJS一起使用,我试图做的是预处理所有请求

这是我的代码:

控制器:

@RestController
@RequestMapping(value = { "/user" })
public class UserController {

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public String getLanguage() {
        return "user";
    }
}
拦截器:

@Component
public class RequestHandler extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
      System.out.println("intercepted");
      return false;
  }
}
网络配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Autowired
  HandlerInterceptor requestHandler;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(requestHandler);
  }
}
我在applicationContext.xml中添加了以下内容:

<mvc:interceptors>
    <bean class="server.RequestHandler" />
</mvc:interceptors>

我整个周末都在努力使这项工作顺利进行,但我做不到,任何帮助都将不胜感激


谢谢大家!

您可以尝试手动定义
Bean
,而不将
拦截器
声明为
@组件
,如下所示:

RequestHandler.java


WebConfig.java

顺便问一下:如果类被声明为拦截器,为什么不将其重命名为包含术语拦截器的内容,例如
RequestInterceptor

它应该直接起作用。请让我知道这是否对你有好处

更新:我已经在一个原型中实现了这一点。请参阅这个最小、完整且可验证的示例。希望有帮助!

您是否尝试注入RequestHandler而不是常规HandlerInterceptor。或者向registry.addInterceptor(new RequestHandler())注册拦截器?我已经尝试过了,但仍然不起作用。为什么要同时使用xml和java配置来设置Spring MVC。。。这是等待发生的麻烦。。。同样,如果没有
@EnableWebMvc
这些配置也不会太多,那么如果手动配置
HandlerAdapter
和/或
HandlerMapping
,同样的情况也会发生。我该怎么做呢?你能给我一个例子,说明我必须做什么改变才能尝试它是否有效吗?我试过了,但说它可以在那里创建一个bean。我不知道我还能做什么,因为我已经尝试了很多东西。我可以在web.xml中设置一些内容吗?因为我的是空的,所以我尝试在那里设置servlet映射,但它说它可以声明或类似的东西。也许您有时间验证它是否对您有效。另外,我必须指出,
preHandle
方法的返回值应该是
true
,以便完成请求处理程序链并到达控制器方法。请也看看这个@Motomine我想要的不是返回它,只是测试它是否有效,但是页面总是加载。我想你在这方面误解了我。你看过我的例子了吗?你的代码应该是一样的。在每个请求期间都会调用拦截器
public class RequestHandler extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws ServletException {
        System.out.println("intercepted");
        return true;
    }
}
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public RequestHandler requestHandler() {
        return new RequestHandler();
    }

    @Override
    public void addInterceptors(final InterceptorRegistry registry) {
        registry.addInterceptor(requestHandler());
    } 
}