热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在我的应用程序中查找所有泽西岛资源方法的列表?-FindalistofallJerseyresourcemethodsinmyapp?

DoesJerseyprovideanywaytolistalloftheresourcesitexposes?Thatis,giventheresourcecla

Does Jersey provide any way to list all of the resources it exposes? That is, given the resource class:

泽西岛是否提供任何方式来列出它所暴露的所有资源?也就是说,给定资源类:

package com.zoo.resource

@Path("/animals")
public class AnimalResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("dog")
    public Dog getDog(){
    ...
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("cat")
    public Cat getCat(){
    ...
    }
}

Does Jersey provide any way for me to get the information:

泽西岛是否为我提供了获取信息的方式:

  • GET at the path /animals/dog returns type Dog
  • GET在路径/动物/狗返回类型狗

  • GET at the path /animals/cat returns type Cat
  • 获取路径/ animals / cat返回类型Cat

(And furthermore, does it provide a way for me to know that AnimalResource is a resource?)

(此外,它是否为我提供了一种了解AnimalResource是资源的方法?)

I would like to have this information available to me in a unit test so that I can check that every resource I expose conforms to what an external system expects. I know that there is automagic that exposes the application.wadl, but I don't see that showing me return types and I don't know how to access it from within my tests.

我希望在单元测试中可以获得这些信息,以便我可以检查我公开的每个资源是否符合外部系统的预期。我知道有一些自动化暴露了application.wadl,但是我没有看到向我显示返回类型,我不知道如何从我的测试中访问它。

1 个解决方案

#1


7  

[update - example is the same but I have reworded my caveats]

[更新 - 示例是相同的但我已经重写了我的警告]

It can be done. Try the following:

可以办到。请尝试以下方法:

import com.sun.jersey.api.model.AbstractResource;
import com.sun.jersey.api.model.AbstractSubResourceMethod;
import com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

public class AnimalsTest
{
   public static void main(String [] args)
   {
      AbstractResource resource = IntrospectionModeller.createResource(AnimalResource.class);
      System.out.println("Path is " + resource.getPath().getValue());

      String uriPrefix = resource.getPath().getValue();
      for (AbstractSubResourceMethod srm :resource.getSubResourceMethods())
      {
         String uri = uriPrefix + "/" + srm.getPath().getValue();
         System.out.println(srm.getHttpMethod() + " at the path " + uri + " return " + srm.getReturnType().getName());
      }
   }
}

class Dog {}

class Cat {}

@Path("/animals")
class AnimalResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("dog")
    public Dog getDog(){
      return null;
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("cat")
    public Cat getCat(){
       return null;
    }
}

These introspection classes are in jersey-server.

这些内省类在泽西服务器中。

Note that the example above uses some Jersey classes that have "impl" in the package name which suggests that these Jersey classes are not intended for public consumption and may very well have breaking changes in the future. I am just speculating here - I am not a Jersey committer. Just a random user.

请注意,上面的示例使用了一些在包名称中具有“impl”的Jersey类,这些类表明这些Jersey类不用于公共消费,并且可能在将来很有可能发生重大变化。我只是在这里推测 - 我不是泽西岛的提交者。只是一个随机的用户。

Also everything above I figured out by perusing the source code. I have never seen any documentation of an approved way to introspect JAX-RS annotated classes. I agree that an officially supported API to do this kind of thing would be very helpful.

此外,我通过仔细阅读源代码找到了所有内容。我从未见过任何关于内省JAX-RS注释类的批准方法的文档。我同意官方支持的API来做这种事情会非常有帮助。


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
夜沙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有