[英]Spring Custom Annotations
我不確定是否有可能輕松做我想做的事情。 我有以下控制器作為休息和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");
}
...
我想在兩個自定義注釋@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");
}
...
我遇到的問題是能夠將值傳遞到內部傳遞給spring注釋的自定義注釋中。 這個@interface會是什么樣子? 任何例子?
謝謝!
@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 {};
}
參考下面的鏈接,我提出了這個解決方案,使用這種技術,我們可以為元注釋注釋的屬性賦予別名,即(這里是RequestMapping,MessageMapping)。
AliasFor的一個缺點是,它是不可重復的注釋。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
@RestController
@RequestMapping(value="/rest/*")
@MessageMapping
public @interface ApiController {
String value() default "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.