如何在 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>
谢谢!
我正在考虑使用 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>
谢谢!