这件事已经困扰我很长一段时间了.. 我正在尝试在 Jetty 中嵌入一个 Jersey 容器。按照这些示例,我可以嵌入 Jersey,并且我看到我公开的 REST 方法正在公开。但是,由于某些奇怪的原因,我的 Jersey 确实返回了 404。看起来 Jersey 无法解析正确的端点。不幸的是,它没有告诉我原因,只是抛出一个 NotFoundException :-(。
我 100% 确定我的方法已被调用。该方法中的 System.out.println 显示在控制台中,我的 Eclipse 调试器清楚地通过了设置的断点。我是否使用 Jersey 2.0、2.3、2.4、1、2.4 并不重要。都有相同的结果。这里是我配置的代码片段:
StartJetty.java :
final int mainport = 9123;
Server jettyServer = new Server(mainport);
HandlerCollection handlerCollection = new ContextHandlerCollection();
jettyServer.setHandler(handlerCollection);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/");
jerseyServlet.setInitOrder(1);
jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "com.test.rest");
handlerCollection.addHandler(context);
jettyServer.start();
jettyServer.join();
来自 REST 资源的片段: com.test.rest.PersonsRSImpl.class:
@Path("/persons")
@Produces( MediaType.APPLICATION_JSON)
public class PersonsRSImpl {
private PersonManager personMgr = PersonManager.getInstance();
@Path("/list")
public Collection<Person> list() {
System.out.println("In Person::list" );
return personMgr.getPersons();
}
}
我的 Person 对象是一个简单的 POJO,带有一些 JAXB 注释。添加/删除它们完全没有区别。
最后但同样重要的是: pom.xml http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>integrationexample</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>Test project</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.outputEncoding>UTF-8</project.build.outputEncoding>
<jetty.version>7.5.4.v20111024</jetty.version>
<jersey.version>2.4.1</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http-spi</artifactId>
<version>${jetty.version}</version>
</dependency>
<!-- Jersey JAX-RS -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-simple-http</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.test.StartJetty</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我启用了 Jersey 的踪迹(谢谢 Michal)。结果跟踪是:
泽西痕迹
HTTP/1.1 404 Not Found
X-Jersey-Tracing-000: START [ ---- / ---- ms | ---- %] baseUri=[http://localhost:9123/rest/] requestUri=[http://localhost:9123/rest/persons/list] method=[GET] authScheme=[n/a] accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8] accept-encoding=[gzip, deflate] accept-charset=n/a accept-language=[en-US,en;q=0.5] content-type=n/a content-length=n/a
X-Jersey-Tracing-001: PRE-MATCH [ 0,01 / 1,03 ms | 0,10 %] PreMatchRequest summary: 0 filters
X-Jersey-Tracing-002: MATCH [ ---- / 1,21 ms | ---- %] Matching path [/persons/list]
X-Jersey-Tracing-003: MATCH [ ---- / 1,27 ms | ---- %] Pattern [/persons(/.*)?] IS selected
X-Jersey-Tracing-004: MATCH [ ---- / 1,41 ms | ---- %] Matched resource: template=[/persons] regexp=[/persons(/.*)?] matches=[/persons] from=[/persons/list]
X-Jersey-Tracing-005: MATCH [ ---- / 1,54 ms | ---- %] Matching path [/list]
X-Jersey-Tracing-006: MATCH [ ---- / 1,58 ms | ---- %] Pattern [/list(/.*)?] IS selected
X-Jersey-Tracing-007: MATCH [ ---- / 1,76 ms | ---- %] Matched resource: template=[/list] regexp=[/list(/.*)?] matches=[/list] from=[/list]
X-Jersey-Tracing-008: MATCH [ ---- / 1,90 ms | ---- %] Matched locator : public java.util.Collection com.test.rest.PersonsRSImpl.list()
X-Jersey-Tracing-009: MATCH [ ---- / 2,08 ms | ---- %] Resource instance: [com.test.rest.PersonsRSImpl @3cceafcb]
X-Jersey-Tracing-010: MATCH [ ---- / 2,21 ms | ---- %] Resource instance: [java.util.HashMap$Values @25591d82]
X-Jersey-Tracing-011: MATCH [ 4,23 / 5,30 ms | 75,92 %] RequestMatching summary
X-Jersey-Tracing-012: RESP-FILTER [ 0,00 / 5,52 ms | 0,05 %] Response summary: 0 filters
X-Jersey-Tracing-013: FINISHED [ ---- / 5,58 ms | ---- %] Response status: 404/CLIENT_ERROR|Not Found
Cache-Control: must-revalidate,no-cache,no-store
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 1284
Server: Jetty(7.5.4.v20111024)
希望你们中的一些人知道发生了什么事!
最佳答案
您需要使用注释来注释您的资源方法 list(),该注释指示资源方法应响应哪个 HTTP 方法(在本例中为 @GET ):
@GET
@Path("/list")
public Collection<Person> list() {
System.out.println("In Person::list" );
return personMgr.getPersons();
}
否则将调用资源方法,但它将被视为子资源定位器。有关子资源和子资源定位器的更多信息,请参阅 JAX-RS 2.0 spec或 Jersey 用户指南,专门用于 Sub-resources .
关于java - 在调用正确的@Path 后,Jersey 返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904538/
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
所以我开始关注ruby,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co