gpt4 book ai didi

java - Rest Service URI 映射到 Java 内部类

转载 作者:行者123 更新时间:2023-11-30 03:38:42 25 4
gpt4 key购买 nike

我必须对其余服务操作进行建模,在这些操作中我试图创建一个 URI 来访问 Java 内部类。让我知道这是否可以使用 Rest Web 服务来实现?我正在使用轻松休息来提供服务。

编辑:(使用 peeskillet 答案提供的代码)

javax.ws.rs.ProcessingException: Unable to invoke request
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:287)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:407)

Caused by: org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8081 refused
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:283)
... 26 more
Caused by: java.net.ConnectException: Connection refused

最佳答案

Please advise if a resource class can be made as Inner class to other class

是的,这是可能的,但我们不能简单地注释内部类路径@Path并期望调用到达那里。我们需要使用“子资源定位器”。基本上,它可以是仅用 @Path 注释的方法,它将返回内部资源类的实例。类似的东西

@Path("/messages")
public class MessageResource {

@GET
@Path("/{id}")
public Response getMessage(@PathParam("id") int id) {
return Response.ok("messages, id: " + id).build();
}

@Path("/{id}/comments")
public CommentsResource getComments() {
return new CommentsResource();
}

public class CommentsResource {

@GET
@Path("/{id}")
public Response getComment(@PathParam("id") int id) {
return Response.ok("Hello Sub-Resource Locators").build();
}
}
}

我们可以测试一下

@Test
public void testResteasy() {
WebTarget target = client.target(TestPortProvider.generateURL(BASE_URI))
.path("messages").path("1234").path("comments").path("5678");
Response response = target.request().get();
System.out.println("Status:" + response.getStatus());
System.out.println("Response: " + response.readEntity(String.class));
response.close();
}

我们将得到响应Hello Sub-Resource Locators

<小时/>

进一步阅读

<小时/>

编辑:

根据您提供的错误,TestPortProvider 将使用端口 8081,并以 http://localhost:8081 开头您的 URI。您传递给 gererateURL 的内容将被附加。通常我将其用于嵌入式服务器测试。但如果您正在运行实际的服务器,它很可能位于端口 8080 上。我建议只传递字符串基本 URL,例如:

WebTarget target = client.target("http://localhost:8080/MyApp/rest")
.path("messages").path("1234").path("comments").path("5678");

关于java - Rest Service URI 映射到 Java 内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com