自定义拦截器返回,但请求未命中控制器中的功能

时间:2019-08-05 15:27:51

标签: java spring-boot

我正在开发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}}中的日志。为什么?可能是什么原因?

0 个答案:

没有答案