1

NetBeans を使用し、依存関係管理として gradle を使用して、Java で WebService を開発しています。

Gradle を使用した Web プロジェクトの開発に関するこの記事を見つけました。Gretty プラグインを使用します。指示に従って(サーブレットコンテナーを jetty から tomcat に変更しただけです)、Webプロジェクトを開発/展開し、サーブレットから「ホームページ」を開くことができました。

問題は、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 の URL です: http://localhost:8088/sisvendas/produtos

前に述べたように、次のリクエストは機能します: http://localhost:8088/sisvendas/ (役に立たない index.html ファイルもあります)

私が間違っているのは何ですか?

4

1 に答える 1

1

JAX-RS は単なる仕様です。使用するには実装する必要があります。あなたが持っている依存関係は、仕様のjarjavax.ws.rs-apiのみです。実装はありません。つまり、アプリケーションを実行するエンジンがありません。JAX-RS アプリケーションを実行するためのエンジンを提供するのは実装次第です。

そうは言っても、JAX-RS 仕様は Java EE 仕様の一部であるため、Wildfly や Glassfish などの Java EE に完全に準拠したアプリケーション サーバーで実行している場合、そのアプリケーション サーバーには既に JAX-RS 実装が内部的に含まれています。であるため、アプリケーション プロジェクト レベルで必要なのは、ソース コードをコンパイルするための仕様 jar だけであり、アプリケーション サーバーには実行時にアプリケーションを実行するためのエンジンがあります。

しかし、あなたの場合、TomcatJava EE 準拠のサーバーではありません。サーブレット仕様を実装するのは、単なるサーブレット コンテナです。したがって、Tomcat で JAX-RS を使用する場合は、依然として JAX-RS実装が必要です。Jerseyはそのような実装の 1 つです。Jersey 実装を使用するには、実際には次の依存関係のみが必要です

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

後者の依存関係は、JSON/POJO サポートを追加することです。コードに欠けているもう 1 つのことは、クラスの@ApplicationPath注釈です。Application

@ApplicationPath("/")
public class ApllicationConfig extends Application {

この@ApplicationPathアノテーションは、Jersey アプリケーションのサーブレット マッピングを設定します。に変更した場合/api、アクセスする URI は

http://localhost:8080/sisvendas/api/produtos
于 2016-06-02T01:38:24.253 に答える