- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Rest/Jersey 和 Tomcat 7 开发一个简单的 Restful Web 服务。如果我的所有路径都包含一个参数,一切都很好。如果我包含一个使用多个参数的参数,当我尝试访问我的资源类支持的任何资源路径时,我会遇到“未找到注入(inject)源”错误——即使是那些之前工作的资源路径。如果我注释掉那段特定的代码,我的所有其他路径都会按预期工作。但是,如果我取消注释那段代码,我将无法使用我的任何路径。
这是我的代码片段:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
// get all the information about a specific item
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public String getItem(@PathParam("id") String itemId)
{
String answer = "{";
answer += "\"itemid\":\"" + itemId + "\",";
answer += "\"type\":0,";
answer += "\"sector\":322948,";
answer += "\"created\":53249098220";
answer += "}";
return answer;
}
// if I comment out this method, all is fine;
// if I leave it in, error is thrown when I make any restful call
// query to see if there is a new item for user
@Path("/loc/{userid}/{xloc}/{yloc}")
@Produces(MediaType.APPLICATION_JSON)
public String getNewitem(@PathParam("userid") String userId,
@PathParam("xloc") Number xLoc,
@PathParam("yloc") Number yLoc)
{
String answer = "{\"itemid\":\"abcdefgh\"}";
return answer;
}
这是错误轨迹:
javax.servlet.ServletException: Servlet.init() for servlet Jersey REST Service threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
root cause
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public java.lang.String com.drunkware.geobijous.resources.GBBijouResource.getNewBijou(java.lang.String,java.lang.Number,java.lang.Number) at index 1.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.drunkware.geobijous.resources.GBBijouResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@757bdd3c]}, definitionMethod=public java.lang.String com.drunkware.geobijous.resources.GBBijouResource.getNewBijou(java.lang.String,java.lang.Number,java.lang.Number), parameters=[Parameter [type=class java.lang.String, source=userid, defaultValue=null], Parameter [type=class java.lang.Number, source=latitude, defaultValue=null], Parameter [type=class java.lang.Number, source=longitude, defaultValue=null]], responseType=class java.lang.String}, nameBindings=[]}']
org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:467)
org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:163)
org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:323)
org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:320)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285)
org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
有什么解决这个问题的建议吗?我正在使用 Jersey 2.12。这是已知错误吗?
最佳答案
您收到的注入(inject)错误是由Number
参数引起的。由于@PathParam 实现不支持像 Number 这样的复杂对象。您可以通过以下代码轻松解决此问题(同时添加@GET)
@GET
@Path("loc/{userid}/{xloc}/{yloc}")
public String getNewitem(@PathParam("userid") String userId,
@PathParam("xloc") int xLoc,
@PathParam("yloc") int yLoc)
{
String answer = "{\"itemid\":\"abcdefgh\"}";
return answer;
}
如果您需要的信息比 int
所能提供的更多,那么有许多方法可以处理复杂的对象。但是你必须改变接收它们的方式,因为 @PathParam
非常简单。有关复杂用法的更多详细信息,请查看 Jackson帮助您进行对象/json 转换。你可能会有这样的事情:
@POST
@Path("loc/{userid}")
public String createNewitem(@PathParam("userid") String userId, MyLocalization aLoc)
{
String answer = "{\"itemid\":\"abcdefgh\"}";
return answer;
}
MyLocalization
类是一个 pojo,您将创建它以由具有以下 dependency 的 jackson 库处理。 :
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>
关于java - 使用 Jersey 在 Restful Resource 中使用多个 @PathParams 时未发现注入(inject)源错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25736819/
我创建了一个 Spring Boot 应用程序,我想在其中使用 Web 套接字。当我在没有参数的情况下使用它时,它工作正常。下面是不带参数的代码 @Configuration @EnableWebSo
我有一个 POST 方法(它需要一些 JSON 数据)。我还想访问路径参数“id”进行处理。但是,当我使用“@PathParam”时,我得到了传递给请求的 JSON 正文。下面是我的代码: @Path
即使您刚刚阅读它,也感谢您的帮助。 问题:返回值为null,为什么?检查了很多论坛,一切似乎都很好,但事实并非如此。 package pack.bb; import javax.ws.rs.GET;
嗨,我已经检查了很多帖子,但我还没有发现我遇到的问题。我的 PathParam 总是为空,谁能告诉我可能是什么问题 界面中的导入: import javax.servlet.http.HttpServ
我想要构建的 API 将包含如下资源: @GET @Path("document/{embedded_path"}) @Produces("text/plain") public String get
我们面临与使路径参数可选相关的问题。 原始网址 /expire/{token} 我们正在尝试做的是为下面的 URL 提供相同的服务。 1. /expire/{token} 2. /expi
我试图从 url 中获取 id,但它始终为空。 @Path("/{id}") @GET @Produces({MediaType.TEXT_XML, MediaType.APPLICATI
我尝试使用 Jersey 来使用 @PathParam,但它总是将其视为 null。 方法如下:网址为 http://localhost:8080/GiftRegistryAPI/api/v2/inv
public Response getCustomerByName( @PathParam("customerName") String customerName) 问题: 我将 customerNa
在 Jersey 类中,两者哪个更合适: 在实例变量上 @PathParam("服务编号")私有(private)字符串 serviceId; 关于方法参数 public Response subsc
我想使用非 spring bean 类对象作为 jersey web 服务类方法的参数。但它在构建时给出了缺少依赖项错误。 我的代码是: @Component @Path("/abcd") publi
我有一个 REST 服务: @POST @Path("/shop/{prodID}/{price}") public Response updatePrice(@PathParam("prodID")
我已经设置了一个 REST 服务来访问存储在数据库中的信息。 我希望能够根据项目的 id 或 name 进行访问。 假设我有一个记录 name | id | description mine | 65
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @
我是 RESTful Jersey 的新手。请问@PathParam有什么区别和 @QueryParam Jersey ? 最佳答案 查询参数添加到?后面的url标记,而路径参数是常规 URL 的一部
我正在处理创建 Jersey 客户端的任务。我正在使用 Jersey 1.18。目标 URL 如下所示。 https://api.test.com/test/{id}?param1=test1&par
我正在开发一个 REST 网络服务,我在其中使用 URL 中的 ID 来指定患者,如下所示: WS/services/patient/1 其中“1”是患者的 ID。所以,在代码中,我这样指定: @GE
我正在使用 JAX-RS 1.x 开发一个简单的 RESTFul 服务,如/{app_id}/job/list/ 所以我定义了一个资源类,如下所示: @Path("/{app_id}/job") @P
我已经使用基本的 Express 服务器启动并运行了 TypeScript,但我遇到了一个问题。 import bodyParser from 'body-parser'; import expres
我在 jax-rs 中有一个服务文件,它有一个通过 @QueryParam 注释接受参数的方法。 注释显然是在编译过程中的某个地方进行处理的。执行修改操作的是哪个类?就像 QueryParam 从 U
我是一名优秀的程序员,十分优秀!