JAX-RS Web应用程序+ Wildfly 8 + ExtJS无法访问服务器方法

时间:2015-01-15 14:40:48

标签: rest jax-rs wildfly

我是Java EE的新手。我已经研究了一些示例和快速入门,并希望从头开始构建我自己的简单helloWorld应用程序。我已经实现了服务器端,但在服务器上部署后,我无法使用REST访问方法。在最后一步,我想将Java EE与ExtJS集成,但现在我遇到了我所描述的问题。我已经阅读了数十篇教程,但它们似乎很简洁。我想做的只是使用Rest的简单helloWorld应用程序并将其与ExtJS集成。但是,当我甚至无法通过URL访问服务器方法时,我无法继续前进。

我在JBoss开发者工作室中创建了新的Dynamic Web Project,并在项目属性中切换了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是simeple POJO类。它只包含一个方法,它返回带有Hello +的字符串,无论你提供什么作为参数。

当我进入浏览器http://localhost:8088/SimpleApp/json时,我只获得NotFound或405错误:不允许使用方法。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我和我的同事设法解决问题。

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") + "\"}";
}

RestActivator类

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 */
}

RestService类

package main;

import javax.ejb.Stateless;

@Stateless
public class RestService {

    public String createHelloMessage(String name) {
            return "Hello " + name + "!";
        }
}

使用这样的结构服务器响应,我也可以使用ExtJs调用方法。 使用Controller中的@PathParam,因为我从ExtJs模型调用此方法,并且在整个URL ExtJs粘贴实例的Id之后。

网址示例:http://localhost:8088/SimpleApp/rest/json

无论如何,谢谢你的帮助。

答案 1 :(得分:-1)

第一个错误是您的两个方法在注释中具有相同的路径。

其次,如上所述排除配置错误,我建议您查看一下您的网络应用。它本身将有一个上下文根,请将其附加到您正在使用的URL,它应该可以工作。

所以,url的格式为:

http://localhost:port/webcontextroot/SimpleApp/json