首页 > 解决方案 > 启动时决定的 URL 的 RequestMapping

问题描述

我有一个案例,或者我想要一个特定的控制器来处理由另一个类中的字段决定的请求模式,它类似于来自资源属性的模式,但不是使用 ${propertyName} 而是方法的返回类型:

@Controller
public class SomeController {
    private final urlDecider;

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

HandlerAdapter似乎与我想要的相似,但问题是支持方法参数只有处理程序作为参数,而不是 url。

标签: javaspringspring-mvc

解决方案


SpEL 可以用来做到这一点。以下是在 Spring Boot 2 / Spring 5.0.9 上测试的。此示例在同一个 bean 上调用一个方法来获取端点名称,但您可以将 SpEL 表达式中的 bean 和方法名称替换为适用于您的应用程序的任何名称。

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

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

  @RequestMapping("#{testBean.endpoint()}")
  public void doit() {
    log.info("Hello World");
  }
}

推荐阅读