我正在开发Spring Boot项目。我有一个HandlerInterceptorAdapter
,在这里我有一些逻辑可以拦截和检查preHandle(...)
中的请求数据。
public class MyCustomInterceptor implements HandlerInterceptorAdapter{
// I only override the preHandle(...)
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response){
//my custom logic here.
// if a condition is not met, I return false, my understanding is that it would stop this request from proceeding forward
if(conditionNotMet) {
log.info("Condition NOT met, returns false!")
response.setStatus(400);
return false;
}
log.info("Condition met, returns true!")
// otherwise, returns true
return true;
}
}
在上述拦截器的preHandle()
中,我有一些自定义逻辑,然后检查是否满足某些条件,返回false以停止继续处理请求,否则返回true。我的理解是,如果最终我返回true,则请求将到达相应的rest控制器。
拦截器已注册并且功能良好:
@Configuration
public class MyConfigurationAdapter implements WebMvcConfigurer {
@Autowired
private MyCustomInterceptor myCustomInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myCustomInterceptor);
}
}
我有一个休息控制器:
@RestController
@RequestMapping(value = "/api/myservice/")
public class MyController {
@PostMapping(value = "add_note")
public MyResponse addNote(@Valid @RequestBody AddNotePayload payload) {
// I see logs in interceptor, it returns true but I don't see this log
log.info(" Start adding note...");
...
}
映射到上述控制器的addNote(...)
函数的URL为POST http//localhost:8080/api/myservice/add_note
。当我在Postman上向此端点射击时,我在拦截器的preHandle()
中看到满足条件的日志,并且preHandler()
返回true
。因为它在那里返回true,所以我希望该请求将被转发到控制器级别,但是我没有看到addNote()
的{{1}}中的日志。为什么?可能是什么原因?