Java 为什么response.getStatus()返回200 OK,即使实际响应不是
我正在实现一个功能,将对API的所有访问记录在日志文件中。在其中,我有响应状态代码以及与每次访问相关的一些信息。我通过Java 为什么response.getStatus()返回200 OK,即使实际响应不是,java,spring-boot,logging,Java,Spring Boot,Logging,我正在实现一个功能,将对API的所有访问记录在日志文件中。在其中,我有响应状态代码以及与每次访问相关的一些信息。我通过response.getStaus()检索状态代码,如AppLogFilter所示 但是,即使实际响应状态为400或405,它也始终记录200 OK。 我这里有什么问题 过滤器配置 package com.example.kasahararestapi.filter; import org.springframework.boot.web.servlet.FilterRegi
response.getStaus()
检索状态代码,如AppLogFilter所示
但是,即使实际响应状态为400或405,它也始终记录200 OK。
我这里有什么问题
过滤器配置
package com.example.kasahararestapi.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<ApiLogFilter> filterRegistrationBean() {
FilterRegistrationBean<ApiLogFilter> registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new ApiLogFilter());
registrationBean.addUrlPatterns("/api/items/*");
return registrationBean;
}
}
改变
logger.info(
"{} {} {} {}", request.getMethod(),
request.getRequestURI(), response.getStatus(), processingTime);
filterChain.doFilter(request, response);
到
原因:
名称链表明您有一个过滤器序列,每个过滤器进行一些处理,然后传递到序列中的下一个过滤器,因此每个对象都有一个链成员,指向序列中的下一个过滤器,在筛选器执行其自己的处理后调用它。序列中的最后一个可能将
null
作为链值,或者它自己知道它是序列中的最后一个。换句话说,在筛选器执行信息处理之前,您正在记录该信息,这将导致状态为200
您在filterChain.doFilter(请求、响应)之前调用该方法代码>因此默认值为200
logger.info(
"{} {} {} {}", request.getMethod(),
request.getRequestURI(), response.getStatus(), processingTime);
filterChain.doFilter(request, response);
filterChain.doFilter(request, response);
logger.info(
"{} {} {} {}", request.getMethod(),
request.getRequestURI(), response.getStatus(), processingTime);