为什么使用ControllerAdvice注解的BaseController中的InitBinder注解方法会执行很多次

无意中打印了一下日志,发现每次执行一个请求,InitBinder注解的那个方法,会直接很多次,但请求的那个方法并未执行多次。

@ControllerAdvice
public class BaseController {

@InitBinder
protected void initBinder(ServletRequestDataBinder binder) throws Exception {
    // 对于需要转换为Date类型的属性,使用DateEditor进行处理
    binder.registerCustomEditor(Date.class, new DateEditor());
    System.out.println("initBinder");
}

}

@Controller
@RequestMapping(value = "/comicController")
public class ComicController extends BaseController {

@Autowired
private BookService bookService;

@RequestMapping(value = "/getLatestList", method = RequestMethod.GET)
@ResponseBody
public ReturnResult getLatestList(ComicVO comicVO) {
    return bookService.getLatestList(comicVO);
}

}

阅读 6.5k
1 个回答

@ControllerAdvice 会拦截所有的Controller请求,如果你的应用不止一个Controller的话,你就会被触发多次。
而@InitBinder是针对Controller方法里所有参数的,你可以打断点看看每次进去这个initBinder的binder的值是什么。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题