Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 spring启动-从筛选器返回pojo响应_Java_Spring_Spring Boot_Spring Mvc_Spring Filter - Fatal编程技术网

Java spring启动-从筛选器返回pojo响应

Java spring启动-从筛选器返回pojo响应,java,spring,spring-boot,spring-mvc,spring-filter,Java,Spring,Spring Boot,Spring Mvc,Spring Filter,我想创建一个具有自动连接构造函数参数的过滤器/bean,对于某些URL的每个请求,都会检查头并返回pojo错误(或者理想情况下抛出将由spring处理的异常),或者通过过滤器链传递请求。差不多 @Bean class MyFilter { @Autowired public MyFilter(MyService myService) {...} public doFilter(request, response, chain) { if (request. ...) {

我想创建一个具有自动连接构造函数参数的过滤器/bean,对于某些URL的每个请求,都会检查头并返回pojo错误(或者理想情况下抛出将由spring处理的异常),或者通过过滤器链传递请求。差不多

@Bean
class MyFilter {

  @Autowired
  public MyFilter(MyService myService) {...}

  public doFilter(request, response, chain) {
     if (request. ...) {
        throw new ResponseStatusException(HttpStatus.BAD_REQUEST)
        // or return new MyErrorPojo()
     }
     return chain.doFilter(request, response)
  }
}

春天的做法是什么?

也许这会对你有所帮助

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Component
@Order( 1 )
public class RequestFilter implements Filter
{

    @Override
    public void doFilter(
            ServletRequest request,
            ServletResponse response,
            FilterChain chain ) throws IOException, ServletException

    {

        HttpServletRequest req = ( HttpServletRequest ) request;
        if( false )
        {
            response.getWriter().println( "error" );
            throw new ServletException( "" );
        }
        else
        {
            doFilter( request, response, chain );
        }

    }
}

我认为这里有一个相当混乱的技术组合:

过滤器属于servlet规范,在HTTP请求抽象级别上运行

一旦过滤器链通过并到达DispatcherServlet(SpringMVC的入口点),spring将与所有mvc产品一起发挥作用

因此,如果您想检查标题,有一个抽象名为
org.springframework.web.servlet.handler.HandlerInterceptorAdapter

您基本上可以创建一个实现此接口的类,并检查属于此接口的方法中的头

公共布尔预处理(HttpServletRequest请求、HttpServletResponse响应、对象处理程序)

如您所见,您可以访问请求,并且可以在那里检查头


现在我自己还没有使用它(现在无法检查),但它需要WebMVCConfiguer级别的配置,该配置有一个特殊的“addInterceptor”方法。因此,我无法确认仅仅添加一个创建类型的bean就足够了,或者您需要使用WebMVCConfiguer对其进行配置

您的意思是否与nope类似,我需要一个验证标头的过滤器。如果header不存在,我想返回nice json错误(pojo或由spring处理的异常),您读过文档了吗?但它没有说明返回pojo或异常。这只是一种注册过滤器和自动布线的方法