3

例如,我的 spring 控制器中映射在同一路径上的方法很少。

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    protected ResourceDTO getById(@PathVariable int id) {
        return super.getById(id);
    }

我想知道是否有一种方法可以创建一个自动具有设置值和方法的注释,以具有如下内容:

    @RequestMappingGetByID
    protected ResourceDTO getById(@PathVariable int id) {
        return super.getById(id);
    }

祝大家拥有美好的一天

更新 我的所有控制器(例如用户,订单,客户端)的目标如下BaseController,但为了映射值,我必须在特定控制器上添加注释。我不想一直写 {id} 并发布我想用已经包含这些值的自定义接口来注释方法

4

1 回答 1

2

以下适用于我测试的 Spring 4.1.x:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@interface RequestMappingGetByID {

}

然后你可以使用

@RequestMappingGetByID
protected ResourceDTO getById(@PathVariable int id) {
    return super.getById(id);
}

就像你提到的。

这种注解被 Spring 称为元注解。查看文档的这一部分

我不确定这个元注释是否可以在 4.x 之前的 Spring 版本中工作,但是这绝对是可能的,因为 Spring 在 3.x 行中有一些元注释处理功能


如果您在哪里使用 Groovy,您还可以利用@AnnotationCollectorAST,这实际上可以防止源代码重复,但会将常规@RequestMapping注释推送到生成的字节码中。查看内容以获取更多详细信息。

在这种情况下的好处是 Spring 不需要配备元注释读取功能,并且该解决方案可能适用于较旧的 Spring 版本

于 2015-08-07T13:20:29.520 回答