Проект WebService Java на Gradle Project

Я занимаюсь разработкой WebService на Java с использованием NetBeans и использую gradle в качестве управления зависимостями.

Я нашел эту статью о разработке веб-проектов с Gradle. Он использует плагин Gretty. Я следовал инструкциям (просто изменил контейнер сервлета с молнии на tomcat) и мог разработать / развернуть веб-проект и открыть "домашнюю страницу" из сервлета.

Проблема в том, что мои классы WebService не работают должным образом. Все запросы GET, сделанные из моего браузера, возвращают код ошибки 404. Для тестирования я создал новый WebProject с использованием Netbeans, но на этот раз без 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 );
}

}

И это URL для GET: http://localhost:8088/sisvendas/produtos

Как я уже говорил, работает следующий запрос: http://localhost:8088/sisvendas/(есть также файл index.html, который бесполезен)

Что я делаю не так?

1 ответ

Решение

JAX-RS - это только спецификация. Это должно быть реализовано, чтобы иметь какое-либо использование. Зависимость у вас есть javax.ws.rs-api, является только спецификацией jar. Нет реализации, то есть нет движка для запуска приложения. Реализация заключается в предоставлении механизма для запуска приложения JAX-RS.

При этом спецификация JAX-RS является частью спецификации Java EE, поэтому, если вы работаете на полностью совместимом сервере приложений Java EE, таком как Wildfly или Glassfish, то этот сервер приложений будет уже иметь реализацию JAX-RS внутри компании. Таким образом, все, что вам нужно на уровне проекта приложения, - это jar спецификации для компиляции исходного кода, и у сервера приложений будет механизм для запуска приложения во время выполнения.

Но в вашем случае Tomcat не является сервером, совместимым с Java EE. Это только контейнер сервлета, который реализует спецификацию сервлета. Так что вам все еще нужна реализация JAX-RS, если вы хотите использовать JAX-RS с Tomcat. Джерси является одной из таких реализаций. Чтобы использовать реализацию Джерси, вам действительно нужна только следующая зависимость

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 аннотация устанавливает отображение сервлета для приложения Джерси. Если вы изменили его на /api то URI, к которому вы будете обращаться,

http://localhost:8080/sisvendas/api/produtos
Другие вопросы по тегам