RestEasy Get Started

RESTEasy是JBoss的一個開源項目,提供一套完整的框架幫助開發(fā)人員構(gòu)建RESTful Web Service和RESTful Java應(yīng)用程序。它是 Jakarta RESTful Web Services規(guī)范的一個完整實現(xiàn),通過Http協(xié)議對外提供基于Java API的 RestFul Web Service。

Java EE 6 引入了對 JSR-311 的支持。JSR-311(JAX-RS:JavaAPI for RESTful Web Services)旨在定義一個統(tǒng)一的規(guī)范,使得 Java 程序員可以使用一套固定的接口來開發(fā) REST 應(yīng)用,避免了依賴于第三方框架。
2018 年初,Eclipse 將 Java EE 更名為 Jakarta EE,JAX-RS也就是現(xiàn)在的Jakarta RESTful Web Services。

網(wǎng)上想找一個RESTEasy的新手教程真的不是那么容易,大部分的文章都比較陳舊了,官方文檔則是一本完善細致的工具手冊,對于我這樣的新手不是那么友好。其中resteasy-tutorial是唯一值得參考的。這篇文章的內(nèi)容很簡單,使用Tomcat運行一個RESTEasy的HelloWorld項目。需要用到的工具及RESTEasy如下所示:

  1. Intellij IDEA
  2. RESTEasy 4.5.2.Final
  3. Tomcat 9.0.26

創(chuàng)建項目

使用Intellij創(chuàng)建一個基于Maven的項目
image.png

并引入RESTEasy所需要的依賴,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>resteasy-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <properties>
        <resteasy.version>4.5.2.Final</resteasy.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-core</artifactId>
            <version>${resteasy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>${resteasy.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>${resteasy.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxb-provider</artifactId>
            <version>${resteasy.version}</version>
        </dependency>

    </dependencies>
</project>

對于Servlet的項目,是需要一個web.xml配置文件,用于聲明哪個Servlet的實現(xiàn)類來處理哪個endpoint的請求,而resteasy-servlet-initializer依賴的引入幫助我們簡化了這一步。RESTEasy提供了實現(xiàn)javax.server.ServletContainerInitializer接口的org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer類。這個初始化類將在所有Servlet context初始化前被執(zhí)行,可以用于映射servlets,filter和listener。
因此在src/main/webapp/WEB-INF/web.xml中可以不做任何配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name>RestEasy Example</display-name>

    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>
</web-app>

這里添加的resteasy.servlet.mapping.prefix適用于在所有的請求前加一個前綴/rest,如果不需要這個前綴也可以忽略此配置。

Application

這個Application和SpringBoot中的@SpringBootApplication很相似。javax.ws.rs.core.Application是一個標準的JAX-RS類,用于提供部署時所需要的一些信息。

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/rest")
public class RestEasyServices extends Application {
    private Set<Object> singletons = new HashSet<Object>();

    public RestEasyServices() {
        singletons.add(new MovieCrudService());
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
}

@ApplicationPath注解中的path和xml中定義的是相同的,用于給所有的endpoint添加一個前綴。這里我們重寫了getSingletons,用于提供所有request的處理類,類似于SpringBoot中的Controller,在Restful的定義中,我們的每個request都是用于操作某種資源的,singletons.add(new MovieCrudService())MovieCrudService就是這樣的一個資源。

Resource

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

@Path("/movies")
public class MovieCrudService {

    @GET
    @Path("/")
    public Response index() {
        return Response.status(200).entity("Hi").build();
    }
}

無需過多的解釋,代碼足夠簡單清晰,這個類提供了一個endpoint:.../rest/movies/,response就是一個文本Hi

Deployment

這里使用的是Tomcat作為Servlet容器來運行這個服務(wù),而這個Tomcat也是使用Intellij自帶的
image.png

在Deployment的Tab下添加一個Artifact,也就是package后生成的war包
image.png

另外注意的一點是需要修改Application Context為/,至于Tomcat的Application Context的作用可以自行Google。

image.png

當配置完成后,便可通過Intellij來運行這個項目,運行后便可通過瀏覽器訪問http://localhost:8082/rest/movies

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容