【问题标题】:Migrating from jersey to spring-mvc/rest: ContainerRequestFilter, ContainerResponseFilter从 jersey 迁移到 spring-mvc/rest:ContainerRequestFilter、ContainerResponseFilter
【发布时间】:2015-02-21 00:05:21
【问题描述】:

由于业务需求,我需要从 jersey 迁移到 spring-mvc/rest ...

我正在 spring-mvc 中搜索与球衣的 ContainerRequestFilterContainerResponseFilter 等效的东西。

有什么想法吗?

【问题讨论】:

  • 你好,你最后是怎么做到的?我对同样的麻烦感到困惑。 stackoverflow.com/questions/41605057/…
  • @Junjie 我说服了我的客户为此使用球衣。 :) 对不起。
  • 谢谢大家@t777。

标签: java spring rest spring-mvc jersey


【解决方案1】:

我认为您正在寻找的是HandlerInterceptor。你不会在二类请求/响应风格中找到它,但两种过滤方法都包含在同一个类中,形式为preHandlepostHandle,相当于request-filter和分别响应-filter。拦截器包装处理程序调用。这是一个例子:

拦截器:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LogginHandlerInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest hsr, 
                             HttpServletResponse hsr1, Object handler) throws Exception {
        System.out.println("preHandle - " + handler);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest hsr, HttpServletResponse hsr1, 
                           Object handler, ModelAndView mav) throws Exception {
        System.out.println("postHandle - " + handler);
    }

    @Override
    public void afterCompletion(HttpServletRequest hsr, HttpServletResponse hsr1, 
                                Object handler, Exception excptn) throws Exception {
        System.out.println("afterCompletion - " + handler);
    }
}

配置:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"..."})
public class WebAppConfiguration extends WebMvcConfigurerAdapter {
    ...
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogginHandlerInterceptor());
    }
    ...
}

另见:

【讨论】:

  • 仅供参考,您可以扩展 HandlerInterceptorAdaptor 以避免在您关心的只是覆盖一种方法(pre 或 post)时不必实现 no-op 方法
  • WebMvcConfigurerAdapter 在 Spring 5 中已弃用。现在您可以实现 WebMvcConfigurer 接口,因为它充满了 Java 8 的默认方法
猜你喜欢
  • 2015-12-20
  • 2019-05-24
  • 2013-06-10
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多