RequestMapping для URL, которые решаются при запуске - PullRequest
0 голосов
/ 15 октября 2018

У меня есть случай, или я хочу иметь определенный контроллер для обработки шаблонов запросов, которые определяются полем в другом классе, это похоже на шаблон, полученный из свойства resources, но вместо использования $ {propertyName} егобудет возвращаемым типом метода:

@Controller
public class SomeController {
    private final urlDecider;

    @RequestMapping(urlDecider.getPatterns())
    public String handle(HttpServletREquest request) {}
}

HandlerAdapter похоже на то, что я хочу, но проблема в том, что параметр метода support имеет только обработчик в качестве параметра, а не URL-адрес.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

после просмотра DispatcherServlet HandlerMapping и его производных мне показалось, что я искал:

public class CustomHandlerMapping extends AbstractUrlHandlerMapping {
    @Override
    protected Object lookupHandler(String urlPath, HttpServletRequest request) {
        final List<String> patterns = urlDecider.getPatterns();
        final PathMatcher pathMatcher = getPathMatcher();
        final boolean anyMatch = patterns.stream()
            .anyMatch(pattern -> pathMatcher.match(pattern, urlPath));
        return anyMatch ? someController : null;
    }
}
0 голосов
/ 15 октября 2018

SpEL может использоваться для этого.Следующее было протестировано на Spring Boot 2 / Spring 5.0.9.В этом примере вызывается метод для того же компонента, который получает имя конечной точки, но вы можете заменить имена компонентов и методов в выражении SpEL на все, что работает для вашего приложения.

@Slf4j
@RestController("testBean")
public class TestBean {

  public String endpoint() {
    return "/test";
  }

  @RequestMapping("#{testBean.endpoint()}")
  public void doit() {
    log.info("Hello World");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...