JAX-RS Web应用+Wildfly 8+ExtJS无法访问服务器方法
JAX-RS Web application + Wildfly 8 + ExtJS cannot access server method
我是 Java EE 的新手。我研究了一些示例和快速入门,并想从头开始构建我自己的简单 helloWorld 应用程序。我已经实现了服务器端,但是在服务器上部署它之后我无法使用 REST 访问方法。在最后一步,我想将 Java EE 与 ExtJS 集成,但现在我遇到了我描述的问题。我已经阅读了数十篇教程,但它们似乎很简洁。我想要做的只是使用 Rest 的简单 helloWorld 应用程序并将其与 ExtJS 集成。但是当我什至无法通过 URL.
访问服务器方法时,我无法继续前进
我在 JBoss developer studio 中创建了新的 Dynamic Web 项目,并在项目属性中切换了 JAX-RS 支持。我不知道我做错了什么。
这是我的代码:
package main;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/SimpleApp")
public class Controller extends Application {
@Inject
RestService helloService;
@PUT
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@GET
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON2() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@POST
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON3() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@POST
@Path("/xml")
@Produces({ "application/xml" })
public String getHelloWorldXML() {
return "<xml><result>" + helloService.createHelloMessage("World") + "</result>`</xml>";`
}
}
RestService 是简单的 POJO class。它仅包含 1 个方法,其中 returns 字符串带有 Hello+您提供的任何参数。
当我在浏览器中输入时 http://localhost:8088/SimpleApp/json 我只收到 NotFound 或 405 错误:方法不允许。
在此先感谢您的帮助。
第一个错误是您的两个方法在注释中具有相同的路径。
其次,排除上述配置错误,我建议您查看您的网络应用程序。它本身将有一个上下文根,请将其附加到您正在使用的 URL,它应该可以工作。
因此,url 的格式为:
我和同事一起解决了问题。
package main;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
@Path("/")
public class Controller {
@Inject
RestService helloService;
@PUT
@Path("/json/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({ "application/json" })
public String getHelloWorldJSON(@PathParam("id") int id) {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
RestActivatorClass
package main;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class RestActivator extends Application {
/* class body intentionally left blank */
}
休息服务class
package main;
import javax.ejb.Stateless;
@Stateless
public class RestService {
public String createHelloMessage(String name) {
return "Hello " + name + "!";
}
}
有了这样的结构服务器响应,我也可以使用 ExtJs 调用方法。
使用 Controller 中的 @PathParam 是因为我从 ExtJs 模型调用此方法,并且在整个 URL ExtJs sticks 实例的 Id 之后。
URL 示例:http://localhost:8088/SimpleApp/rest/json
无论如何感谢您的帮助。
我是 Java EE 的新手。我研究了一些示例和快速入门,并想从头开始构建我自己的简单 helloWorld 应用程序。我已经实现了服务器端,但是在服务器上部署它之后我无法使用 REST 访问方法。在最后一步,我想将 Java EE 与 ExtJS 集成,但现在我遇到了我描述的问题。我已经阅读了数十篇教程,但它们似乎很简洁。我想要做的只是使用 Rest 的简单 helloWorld 应用程序并将其与 ExtJS 集成。但是当我什至无法通过 URL.
访问服务器方法时,我无法继续前进我在 JBoss developer studio 中创建了新的 Dynamic Web 项目,并在项目属性中切换了 JAX-RS 支持。我不知道我做错了什么。
这是我的代码:
package main;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/SimpleApp")
public class Controller extends Application {
@Inject
RestService helloService;
@PUT
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@GET
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON2() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@POST
@Path("/json")
@Produces({ "application/json" })
public String getHelloWorldJSON3() {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
@POST
@Path("/xml")
@Produces({ "application/xml" })
public String getHelloWorldXML() {
return "<xml><result>" + helloService.createHelloMessage("World") + "</result>`</xml>";`
}
}
RestService 是简单的 POJO class。它仅包含 1 个方法,其中 returns 字符串带有 Hello+您提供的任何参数。
当我在浏览器中输入时 http://localhost:8088/SimpleApp/json 我只收到 NotFound 或 405 错误:方法不允许。
在此先感谢您的帮助。
第一个错误是您的两个方法在注释中具有相同的路径。
其次,排除上述配置错误,我建议您查看您的网络应用程序。它本身将有一个上下文根,请将其附加到您正在使用的 URL,它应该可以工作。
因此,url 的格式为:
我和同事一起解决了问题。
package main;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
@Path("/")
public class Controller {
@Inject
RestService helloService;
@PUT
@Path("/json/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({ "application/json" })
public String getHelloWorldJSON(@PathParam("id") int id) {
return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
}
RestActivatorClass
package main;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class RestActivator extends Application {
/* class body intentionally left blank */
}
休息服务class
package main;
import javax.ejb.Stateless;
@Stateless
public class RestService {
public String createHelloMessage(String name) {
return "Hello " + name + "!";
}
}
有了这样的结构服务器响应,我也可以使用 ExtJs 调用方法。 使用 Controller 中的 @PathParam 是因为我从 ExtJs 模型调用此方法,并且在整个 URL ExtJs sticks 实例的 Id 之后。
URL 示例:http://localhost:8088/SimpleApp/rest/json
无论如何感谢您的帮助。