我一直在使用 Apache Wink 编写基于 JAX-RS 的 ReST 应用程序,并且我了解路径参数与资源句柄类之间关联的概念。在这里我看到,我们可以使用 @Path 注释和相应的资源来定义路径,这些资源将基于 HTTP 方法被调用..
现在我正在寻找类似资源的东西,应该为可变数量的路径参数调用它。
例如
我希望我的单个资源类 CollegeResource 应该为 /rest/college、/rest/college/subject、/rest/college/subject/teachers、 这样的 URI 调用,它可以达到任意数量的路径参数。
如果我之前知道路径参数的数量,那么我可以使用类似 /rest/college/{param1}/{param2} 的方式实现这一点。但是路径参数的数量是未知的。所以我觉得(我可能是错的)不能使用这种方法。
我仍然可以使用的另一种方法是使用查询参数。但我希望它仅可用作路径参数。
有什么方法可以使用 apache wink 和任何其他配置来完成这项工作吗?如果不在 Apache wink 中,是否有任何其他 JAX-RS 实现支持此功能?
最佳答案
您可以使用正则表达式,例如 @Path("/college/{param: .*}") , 然后使用 List<PathSegment>作为方法参数。例如
@GET
@Path("/college/{params: .*}")
public Response get(@PathParam("params") List<PathSegment> params) {
StringBuilder builder = new StringBuilder();
for (PathSegment seg: params) {
builder.append(seg.getPath());
}
return Response.ok(builder.toString()).build();
}
C:\>curl -v http://localhost:8080/college/blah/hello/world/cool
Result:blahhelloworldcool
但就个人而言,我会远离这种事情。你的 URI 路径(模板)应该有一些语义。允许任意数量的路径参数(可能没有任何意义)容易出错,而 IMO 是重新设计的原因。不过,在提供任何建议之前,我需要了解此设计选择背后的语义。
关于java - 如何为可变数量的路径参数编写单个 JAX-RS 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014737/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b