Java spring启动-从筛选器返回pojo响应
我想创建一个具有自动连接构造函数参数的过滤器/bean,对于某些URL的每个请求,都会检查头并返回pojo错误(或者理想情况下抛出将由spring处理的异常),或者通过过滤器链传递请求。差不多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
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或异常。这只是一种注册过滤器和自动布线的方法