流程引擎Camunda開發(fā)記錄(二)中

一县忌、RESET API

REST API 的目標是提供對引擎所有相關接口的訪問。

Spring是用于開發(fā)企業(yè)級應用程序的流行框架断盛。經(jīng)過多年的發(fā)展苗沧,SpringBoot登上了舞臺。Spring是使用@RestController編寫RESTful Web服務个曙。

編寫RESTful Web服務的方法有很多锈嫩,Jersey是JAX-RS的開源框架實現(xiàn),它是RESTful Web服務的Java API。JAX-RS是Java EE技術的一部分呼寸。

二那槽、如何在在Spring使用Jersey呢?

本文將學習如何使用Spring Boot和Jersey框架等舔,去配置和創(chuàng)建JAX-RS 2.0 REST API接口;
這個示例應用使用的是Jersey的Servlet容器去部署REST API接口糟趾;

(一)配置

工程目錄

image.png

1.訪問Spring Initializr網(wǎng)站慌植,添加Jersey (JAX-RS)依賴,點擊生成代碼义郑;
2.下載代碼到本地蝶柿,解壓,導入代碼到IDE中
3.檢查下pom.xml代碼里是否包含了spring-boot-starter-jersey依賴非驮;

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

(二)創(chuàng)建JAX-RS REST資源

先創(chuàng)建一個UserResource類交汤,代碼如下:
UserResource.java

package com.howtodoinjava.jerseydemo;
 
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "users")
@Path("/users")
public class UserResource
{
    private static Map<Integer, User> DB = new HashMap<>();
     
    @GET
    @Produces("application/json")
    public Users getAllUsers() {
        Users users = new Users();
        users.setUsers(new ArrayList<>(DB.values()));
        return users;
    }
     
    @POST
    @Consumes("application/json")
    public Response createUser(User user) throws URISyntaxException
    {
        if(user.getFirstName() == null || user.getLastName() == null) {
            return Response.status(400).entity("Please provide all mandatory inputs").build();
        }
        user.setId(DB.values().size()+1);
        user.setUri("/user-management/"+user.getId());
        DB.put(user.getId(), user);
        return Response.status(201).contentLocation(new URI(user.getUri())).build();
    }
 
    @GET
    @Path("/{id}")
    @Produces("application/json")
    public Response getUserById(@PathParam("id") int id) throws URISyntaxException
    {
        User user = DB.get(id);
        if(user == null) {
            return Response.status(404).build();
        }
        return Response
                .status(200)
                .entity(user)
                .contentLocation(new URI("/user-management/"+id)).build();
    }
 
    @PUT
    @Path("/{id}")
    @Consumes("application/json")
    @Produces("application/json")
    public Response updateUser(@PathParam("id") int id, User user) throws URISyntaxException
    {
        User temp = DB.get(id);
        if(user == null) {
            return Response.status(404).build();
        }
        temp.setFirstName(user.getFirstName());
        temp.setLastName(user.getLastName());
        DB.put(temp.getId(), temp);
        return Response.status(200).entity(temp).build();
    }
 
    @DELETE
    @Path("/{id}")
    public Response deleteUser(@PathParam("id") int id) throws URISyntaxException {
        User user = DB.get(id);
        if(user != null) {
            DB.remove(user.getId());
            return Response.status(200).build();
        }
        return Response.status(404).build();
    }
     
    static
    {
        User user1 = new User();
        user1.setId(1);
        user1.setFirstName("John");
        user1.setLastName("Wick");
        user1.setUri("/user-management/1");
 
        User user2 = new User();
        user2.setId(2);
        user2.setFirstName("Harry");
        user2.setLastName("Potter");
        user2.setUri("/user-management/2");
         
        DB.put(user1.getId(), user1);
        DB.put(user2.getId(), user2);
    }
}

(三)Users.java

package com.howtodoinjava.jerseydemo;
  
import java.util.ArrayList;
 
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "users")
public class Users {
  
    @XmlElement(name="user")
    private ArrayList<User> users;
  
    public ArrayList<User> getUsers() {
        return users;
    }
  
    public void setUsers(ArrayList<User> users) {
        this.users = users;
    }
}

(四)User.java

package com.howtodoinjava.jerseydemo;
  
import java.io.Serializable;
  
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "user")
public class User implements Serializable {
  
    private static final long serialVersionUID = 1L;
  
    @XmlAttribute(name = "id")
    private int id;
  
    @XmlAttribute(name="uri")
    private String uri;
  
    @XmlElement(name = "firstName")
    private String firstName;
  
    @XmlElement(name = "lastName")
    private String lastName;
  
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getUri() {
        return uri;
    }
    public void setUri(String uri) {
        this.uri = uri;
    }
}

(五)配置Jersey

到目前為止,我們已經(jīng)創(chuàng)建了一個JAX-RS資源劫笙,現(xiàn)在我們想通過spring boot應用去訪問它芙扎,步驟如下;
1.首先我們要注冊改資源為Jersey資源填大,代碼如下:

package com.howtodoinjava.jerseydemo;
 
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;
 
@Component
public class JerseyConfig extends ResourceConfig
{
    public JerseyConfig()
    {
        register(UserResource.class);
    }
}

注意需要加上 @Component注解戒洼,以便Spring Boot能夠掃描到;
2.其次JerseyConfig需要繼承ResourceConfig允华,該類提供了很多高級功能圈浇,簡化了JAX-RS組件的注冊工作;
3.最后Spring Boot Application啟動類需要繼承SpringBootServletInitializer

package com.howtodoinjava.jerseydemo;
 
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
 
@SpringBootApplication
public class JerseydemoApplication extends SpringBootServletInitializer
{
    public static void main(String[] args)
    {
        new JerseydemoApplication().configure(new SpringApplicationBuilder(JerseydemoApplication.class)).run(args);
    }
}

(六)演示

啟動Spring Boot應用靴寂,訪問user 資源


image.png

轉(zhuǎn)載自:https://www.cnblogs.com/chenpi/p/9785955.html#_label5

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磷蜀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子百炬,更是在濱河造成了極大的恐慌褐隆,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件收壕,死亡現(xiàn)場離奇詭異妓灌,居然都是意外死亡,警方通過查閱死者的電腦和手機蜜宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門虫埂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圃验,你說我怎么就攤上這事掉伏。” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵斧散,是天一觀的道長供常。 經(jīng)常有香客問我,道長鸡捐,這世上最難降的妖魔是什么栈暇? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮箍镜,結果婚禮上源祈,老公的妹妹穿的比我還像新娘。我一直安慰自己色迂,他們只是感情好香缺,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歇僧,像睡著了一般图张。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诈悍,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天祸轮,我揣著相機與錄音,去河邊找鬼侥钳。 笑死倔撞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的慕趴。 我是一名探鬼主播痪蝇,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冕房!你這毒婦竟也來了躏啰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耙册,失蹤者是張志新(化名)和其女友劉穎给僵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體详拙,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡帝际,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饶辙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹲诀。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弃揽,靈堂內(nèi)的尸體忽然破棺而出脯爪,到底是詐尸還是另有隱情则北,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布痕慢,位于F島的核電站尚揣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掖举。R本人自食惡果不足惜快骗,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塔次。 院中可真熱鬧滨巴,春花似錦、人聲如沸俺叭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熄守。三九已至,卻和暖如春耗跛,著一層夾襖步出監(jiān)牢的瞬間裕照,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工调塌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晋南,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓羔砾,卻偏偏與公主長得像负间,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姜凄,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容