我有以下服务(我无法控制路径和注释)
@Path("/")
public class MyService {
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public void getById(@PathParam("id") final Long id) {...}
@GET
@Produces(MediaType.APPLICATION_JSON)
public void getAll(@QueryParam("param1") Long param1
,@QueryParam("param2") Long param2) {...}
}
场景A:
如果使用 /rest/myservice 和 Web 的应用程序上下文部署服务.xml则映射为
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
一切正常。一个获取http://localhost:8080/rest/my service/123的调用调用getById,一个获取http://localhost:8080/rest/my service?param1=123调用getAll
场景 B:
如果使用 /rest 和 Web 的应用程序上下文部署服务.xml则映射为
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservice/*</url-pattern>
</servlet-mapping>
呼叫GEThttp://localhost:8080/rest/myservice/123仍然调用getById,但调用GEThttp://localhost:8080/rest/myservice?param1=123还调用getById,Jersey在NumberFormatException上崩溃(它认为/myservice实际上是方法的第一个参数,id是Long)。
同样重要的是要提到GEThttp://localhost:8080/rest/myservice/(注意尾随斜杠)确实调用getAll,但我将无法发送参数。
我唯一能控制的是html" target="_blank">web.xml和应用上下文(但一定不能是/rest/myservice。它必须是通用的,并且与服务名无关)
有没有办法让方案 B 工作?
更新:添加了客户端代码
来自Restlet客户端的简单Rest调用:
GET http://localhost:8080/rest/myservice/123 - 200 OK
<code>获取http://localhost:8080/rest/myservice?param1=123导致异常
org.glassfish.jersey.server.internal.inject.ExtractorException: java.lang.NumberFormatException: For input string: "myservice"
at org.glassfish.jersey.server.internal.inject.ParamConverters$AbstractStringReader.fromString(ParamConverters.java:90)
at org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.convert(AbstractParamValueExtractor.java:138)
at org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.fromString(AbstractParamValueExtractor.java:129)
at org.glassfish.jersey.server.internal.inject.SingleValueExtractor.extract(SingleValueExtractor.java:83)
at org.glassfish.jersey.server.internal.inject.PathParamValueFactoryProvider$PathParamValueFactory.provide(PathParamValueFactoryProvider.java:92)
at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:81)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:121)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:136)
只是为了完整起见,http://localhost:8080/rest/myservice/?param1=123
'?'前的斜杠将请求关系上下文从 /myservice更改为/
更新:事实证明,这个问题不会在较新的泽西岛版本中重现。版本2.25.1不受此影响。
问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛
我在尝试安装MAVEN时遇到了这个错误。我尝试了排除,但不确定在pom文件中包含的位置。让我在我的pom文件中应该包括怎样和什么排除标记。我还附加了我的pom文件片段,其中包括排除'SLF4J:Class path包含多个SLF4J绑定。 SLF4J:在[jar:file:/c:/users/147188/.m2/repository/ch/qos/logback/logback-classic/
当尝试运行gradle构建时,我得到了这个错误 我理解这是一个版本冲突,但不确定如何解决,以及哪个版本 要排除的版本。。。 gradle依赖关系树是: 但我甚至不知道怎么读… 你能帮忙吗?
问题内容: 好吧,我已经研究并没有找到以下问题的解决方法`’SQL Error (1442): Can not update table’ messages’ in stored function / trigger because it is already used by statement Which invoked this stored function / trigger.`` 我的触
我的应用程序使用spring boot版本2.5.0和spring cloud starter netflix zuul 2.2.8。释放 在最新的spring boot版本2.5.0中,getErrorPath()API从ErrorController中删除,但最新的spring cloud starter netflix zuul 2.2.8。RELEASE仍调用此API并导致此错误 有人遇到
void trigger_error(string error_msg, [int level]) This function can be used to output an error message using Smarty. level parameter can be one of the values used for trigger_error() PHP function, i.e