Gradle项目上的WebService Project Java

时间:2016-06-02 01:12:45

标签: java web-services netbeans gradle gretty

我使用NetBeans在Java中开发WebService并使用gradle作为依赖性管理。

我发现this article关于使用gradle开发Web项目。它使用Gretty插件。我按照说明操作(刚刚将servlet容器从jetty更改为tomcat)并可以开发/部署Web项目并打开"主页"来自servlet。

问题是我的WebService类无法正常工作。从我的浏览器发出的所有GET请求都返回404错误代码。为了测试,我使用Netbeans创建了一个新的WebProject,但这次没有Gradle,它就像一个魅力。

以下是代码:

的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.akhikhl.gretty:gretty:+'
    }
}

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'

gretty {
    port = 8088
    contextPath = '/sisvendas'
    servletContainer = 'tomcat8'
}
repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.10'
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.0.1'

} 

资源:

@Path("produtos")
public class ProdutosResource {

    @Context
    private UriInfo context;

    public ProdutosResource() {
    }

    @GET
    @Produces("application/json")
    public String getJson() {
        // Just for testing...
        return "{\"produtos\":\"arroz\"}";
    }

    @PUT
    @Consumes("application/json")
    public void putJson(String content) {
    }
}

应用程序配置类:

public class ApllicationConfig extends Application{

@Override
public Set<Class<?>> getClasses() {

    Set<Class<?>> resourcesSet = new java.util.HashSet<>();
    adicionarClassesRecursos( resourcesSet );
    return resourcesSet;

}

private void adicionarClassesRecursos( Set<Class<?>> resources ) {
    resources.add( com.gear.dev.webprojectgradle.resources.ProdutosResource.class );
}

}

这是GET的网址:http://localhost:8088/sisvendas/produtos

正如我之前所说,以下请求有效:http://localhost:8088/sisvendas/ (还有一个无用的index.html文件)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

JAX-RS只是规范。它需要实现才能使用。您拥有javax.ws.rs-api的依赖关系只是规范 jar。没有实现,这意味着没有引擎来运行应用程序。实现提供运行JAX-RS应用程序的引擎。

话虽如此,JAX-RS规范是Java EE规范的一部分,因此如果您在Java EE完全兼容的应用程序服务器(如Wildfly或Glassfish)中运行,那么该应用程序服务器将具有JAX-RS已经在内部实现,因此在应用程序项目级别需要的是编译源代码的规范jar,应用程序服务器将具有在运行时运行应用程序的引擎。

但在您的情况下,Tomcat 不是符合Java EE的服务器。它只是一个servlet容器,它实现了servlet规范。因此,如果要将JAX-RS与Tomcat一起使用,则仍需要JAX-RS 实现Jersey就是这样一种实现。要使用Jersey实现,您实际上只需要以下依赖

compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.23'
compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.23'

后一种依赖是添加JSON / POJO支持。您的代码中缺少的另一件事是@ApplicationPath

上的Application注释
@ApplicationPath("/")
public class ApllicationConfig extends Application {

@ApplicationPath注释设置Jersey应用程序的servlet映射。如果您将其更改为/api,则您要访问的URI是

http://localhost:8080/sisvendas/api/produtos
相关问题