Как можно создать веб-сервисы в Vaadin 12?

Вопрос задан: 11 месяцев назад Последняя активность: 10 месяцев назад
up 1 down

Я подумываю об использовании Vaadin 12 для моей фронт-эндовской разработки (мы в основном разработчики Java, и я бы хотел сохранить код на Java по большей части). Однако нам может потребоваться также поддержка веб-сервисов. Если бы мы не использовали Vaadin, мы бы просто использовали Jersey & DropWizard и создание веб-сервисов просты.

Но в Vaadin 12 можно ли создавать веб-сервисы с минимальным дополнительным кодом/хаки? (Я видел примеры того, как это сделать в Vaadin 8, но Vaadin 10 и 12 существенно отличается от того, что я читал.) В частности, любой пример кода/пример, на который кто-то мог бы указать мне, как это сделать в Vaadin 12?

(Относительно примечания: действительно ли это «плохая» идея, и я должен просто внедрить отдельную систему (используя Джерси в DropWizard) для одного или двух веб-сервисов?... Я бы предпочел не поддерживать полностью новый сервер/instance и т. д. только для пары веб-сервисов, когда 99% моей логики предположительно будет в системе Vaadin.)

2 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 5 down accepted

В этом смысле Vaadin 8 и Vaadin 10+ абсолютно одинаковы. Если вы хотите, например, предоставить службу REST, в дополнение к вашему пользовательскому интерфейсу Vaadin, просто предоставьте API REST другой URL-адрес. Например. служите им из "/ api", если root ("/") сопоставлен с Vaadin. Вы можете сделать это либо с двумя отдельными веб-приложениями (военные файлы), либо сопоставив пользовательский интерфейс и API Vaadin только с разными адресами.

Ниже приведено очень простое приложение JAX-RS, которое прекрасно разворачивается рядом с приложением Vaadin (также с Vaadin 10+, протестированным с использованием Wildfly):

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;

@ApplicationPath("/api")
public class RestStuff extends Application {

    @Path("/")
    public static class HelloWorld {
        @GET
        @Produces("text/plain")
        public String getMessage() {
            return "Hello World";
        }
    }
}
up 0 down

@mstahv Я наконец-то получил его на работу. Моя ошибка не заключалась в использовании правильных библиотек трикотажа. В итоге у меня работали следующие библиотеки:

  <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.27</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.27</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.inject/jersey-hk2 -->
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>2.27</version>
        </dependency>

Спасибо!