这个看起来相对简单。我正在搞乱注释,我试图做以下事情:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Path("")
public @interface TestAnnotation {
@AliasFor(annotation = Path.class, attribute = "value")
String path();
}
这不起作用。当我像这样使用它时:
@Path("")
public class MyResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@TestAnnotation(path = "/things")
public void postIt(Thing myThing) {
// Do various things and then return a Response
}
}
...我收到405
作为回报。如果我这样做:
// Remove class-level @Path
// @Path("")
public class MyResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@TestAnnotation(path = "/things")
public void postIt(Thing myThing) {
// Do various things and then return a Response
}
}
...我收到了404
作为回报。
只有@Path
或@Path
具有必需value
属性导致此功能无法正常运行的事实,我不知道如何解决此问题。< / p>
答案 0 :(得分:0)
经过进一步的实验和研究,看来我试图做的事实上是不可能的。
利用杰克逊的{
...
access_type='offline',
prompt='select_account consent'
}
进行了后续尝试,并通过Spring的@JsonView
通过我的注释来揭露它,而这也未能发挥作用。
我花了一些时间思考注释是如何工作的,并考虑了peeskillet关于编译与处理的评论,我得出结论,泽西岛和杰克逊都必须使用注释处理器,基本上只需要调用&#34; Method.isAnnotationPresent()&#34;用于检测相关注释。 Spring的@AliasFor
很可能不编译也不会将别名的元注释编织到目标方法的字节码中,因此处理器找不到它们。
我对此问题的个人解决方案是完全删除JAX-RS并使用Spring的@AliasFor
,其中可以在组合注释中别名,并且只接受杰克逊的@RequestMapping
根本无法整合到合成的注释中。
显然,对于大多数人来说,这不是一个理想的解决方案,特别是那些拥有大型已建立系统的人。在这种情况下,组合注释的想法很可能在JAX-RS之前很久就会被抛弃。
因此,如果有人对此问题有更深入的了解,或者直接来自Spring团队的人想要加入,请随意。