Java Spring自定义注释

Java Spring自定义注释,java,spring,annotations,Java,Spring,Annotations,我不确定是否有可能轻松地做我想做的事情。我有以下控制器,它同时作为rest和websocket控制器工作: @RestController @RequestMapping("rest/user") @MessageMapping("/user") public class UserController { @Autowired private UserRepo userRepo; @RequestMapping("/list") @MessageMapping

我不确定是否有可能轻松地做我想做的事情。我有以下控制器,它同时作为rest和websocket控制器工作:

@RestController
@RequestMapping("rest/user")
@MessageMapping("/user")
public class UserController {

    @Autowired
    private UserRepo userRepo;

    @RequestMapping("/list")
    @MessageMapping("/list")
    @SendTo("/channel/user")
    public apiResImpl list() {      
        Iterable<UserImpl> users = userRepo.findAll();  
        return users != null ? new apiResImpl("success", users) :  new apiResImpl("fail");
    }

 ...
@RestController
@请求映射(“rest/用户”)
@消息映射(“/user”)
公共类用户控制器{
@自动连线
私人用户回购用户回购;
@请求映射(“/list”)
@消息映射(“/list”)
@发送到(“/channel/user”)
公共apiResImpl列表(){
Iterable users=userRepo.findAll();
返回用户!=null?新建apiResImpl(“成功”,用户):新建apiResImpl(“失败”);
}
...
我想将这些注释中的几个封装在两个自定义注释@ApiController和@ApiMapping中

大概是这样的:

@ApiController("/user")
public class UserController {

    @Autowired
    private UserRepo userRepo;

     @ApiMapping("/list")
     public apiResImpl list() {     
         Iterable<UserImpl> users = userRepo.findAll(); 
         return users != null ? new apiResImpl("success", users) :  new apiResImpl("fail");
     }

 ...
@ApiController(“/user”)
公共类用户控制器{
@自动连线
私人用户回购用户回购;
@ApiMapping(“/list”)
公共apiResImpl列表(){
Iterable users=userRepo.findAll();
返回用户!=null?新建apiResImpl(“成功”,用户):新建apiResImpl(“失败”);
}
...
我遇到的问题是能够将值传递到内部交给spring注释的自定义注释中。这个@interface看起来像什么?有什么例子吗

谢谢

         @Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
@RestController
@RequestMapping(value="/rest/*")
@MessageMapping
public @interface ApiController {
    String value() default "";

}
参考下面的链接,我提出了这个解决方案,使用这种技术,我们可以为元注释注释的属性提供一个别名,即(这里是RequestMapping,MessageMapping)

AliasFor的一个缺点是,它是不可重复的注释


这个答案确实让我充满了希望:)但它似乎没有起到作用。Rest调用返回404,websocket消息没有得到响应。“String value()”似乎没有1)附加到RequestMapping的值上,2)似乎没有与MessageMapping的value属性通信。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@RequestMapping // meta-annotated RequestMapping 
@MessageMapping // meta-annotated MessageMapping
public @interface ApiController {

     @AliasFor(annotation = RequestMapping.class, attribute = "value") // -> alias for RequestMapping value attribute
     String[] value() default {};

     @AliasFor(annotation = MessageMapping.class, attribute = "value") // -> alias for MessageMapping value attribute
     String[] mvalue() default{};   
}


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@RequestMapping
@MessageMapping
public @interface ApiMapping {

    @AliasFor(annotation = RequestMapping.class, attribute = "value")
    String[] value() default {};

    @AliasFor(annotation = MessageMapping.class, attribute = "value")
    String[] mvalue() default {};

    @AliasFor(annotation = RequestMapping.class, attribute = "method")
    RequestMethod[] method() default {};
}