如何在 Vaadin 12 中创建 Web 服务?

How can one create webservices in Vaadin 12?

我正在考虑使用 Vaadin 12 进行我的前端开发(我们主要是纯粹的 Java 工程师,我想将大部分代码保留在 Java 中)。然而,我们可能还需要支持网络服务。如果我们不使用 Vaadin,我们只需使用 Jersey 和 DropWizard,创建 Web 服务非常简单。

但是在 Vaadin 12 中,我可以用最少的额外 code/hacks 创建网络服务吗? (我在 Vaadin 8 中看到了如何执行此操作的示例,但 Vaadin 10 和 12 与我阅读的内容有很大不同。)特别是,任何示例 code/example 有人可以指出我如何在 Vaadin 12 中执行此操作?

(相关说明:这是一个 "bad" 想法吗?我应该为我的一个或两个网络服务实施一个单独的系统(在 DropWizard 中使用 Jersey)吗?...我宁愿不这样做必须支持一个全新的 server/instance 等只是为了几个 web 服务,而我的 99% 的逻辑大概都在 Vaadin 系统中。)

从这个意义上说,Vaadin 8和Vaadin 10+是完全一样的。例如,如果您想公开一个 REST 服务,除了您的 Vaadin UI,只需将 REST API 公开给另一个 URL。例如。如果根 ("/") 映射到 Vaadin,则从 "/api" 为它们提供服务。您可以使用两个单独的 Web 应用程序(war 文件)或通过将 Vaadin UI 和 API 映射到不同的地址来执行此操作。

下面是一个非常简单的 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";
        }
    }
}

@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>

谢谢!