Я просматривал весеннюю документацию, в частности раздел сопоставления обработчиков, и узнал, что мы можем зарегистрировать метод сопоставления обработчиков во время выполнения. Я понимаю, как это делается, но я не могу понять, зачем вообще нам нужна такая функциональность?
Пожалуйста, обратитесь к следующему фрагменту кода для регистрации обработчиков.
@Autowired
public void setHandlerMapping(RequestMappingHandlerMapping mapping, HelloRestController handler)
throws NoSuchMethodException {
RequestMappingInfo info = RequestMappingInfo
.paths("/mycustomapi").methods(RequestMethod.GET).build();
Method method = HelloRestController.class.getMethod("customHandler");
mapping.registerMapping(info, handler, method);
}
Если кто-то может объяснить некоторые варианты использования, где это требуется, это будет полезно, спасибо.
Я никогда этим не пользовался, но вот одна утилита, о которой я могу вспомнить:
Поскольку аннотации принимают в качестве параметров только постоянные выражения, вы не можете написать что-то подобное:
@GetMapping(requestMapping(...)) // The value for annotation GetMapping.value must be a constant expression
public String customHandler(...) {
...
}
Но вы могли бы написать это:
RequestMappingInfo info = RequestMappingInfo
.paths(requestMapping(...))
.methods(RequestMethod.GET)
.build();
Другими словами, вы можете написать обработчики для URI, которые вычисляются (например, хранятся в файле конфигурации).