1. 程式人生 > >REST(二)開發REST風格端點

REST(二)開發REST風格端點

REST(二)開發REST風格端點

篇幅有限,這裡我們就不在贅述service和dao的設計和實現了,如果需要可以文章末尾檢視原始碼。

我們先定義使用者實體

實體

package com.lay.rest.entity;

import com.lay.rest.entity.enumeration.SexEnum;

/**
 * @Description:
 * @Author: lay
 * @Date: Created in 13:11 2018/11/17
 * @Modified By:IntelliJ IDEA
 */
public class User {
    private
Long id; private String userName; private SexEnum sex=null; private String note; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUserName() { return userName; } public void setUserName
(String userName) { this.userName = userName; } public SexEnum getSex() { return sex; } public void setSex(SexEnum sex) { this.sex = sex; } public String getNote() { return note; } public void setNote(String note) { this.note =
note; } }

這裡的性別是個列舉類,這裡給出實現

package com.lay.rest.entity.enumeration;

/**
 * @Description:
 * @Author: lay
 * @Date: Created in 13:29 2018/11/17
 * @Modified By:IntelliJ IDEA
 */
public enum SexEnum {
    MALE(1,"男"),FEMALE(2,"女");

    private int id;
    private String name;
    SexEnum(int id,String name){
        this.id=id;
        this.name=name;
    }

    public static SexEnum getEnumById(int id){
        for (SexEnum sex : SexEnum.values()) {
            if(sex.getId()==id){
                return sex;
            }
        }return null;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然後是在頁面展示的VO(View Object)物件

VO

package com.lay.rest.vo;

/**
 * @Description:
 * @Author: lay
 * @Date: Created in 14:56 2018/11/17
 * @Modified By:IntelliJ IDEA
 */
public class UserVo {
    private Long id;
    private String userName;
    private int sexCode;
    private String sexName;
    private String note;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getSexCode() {
        return sexCode;
    }

    public void setSexCode(int sexCode) {
        this.sexCode = sexCode;
    }

    public String getSexName() {
        return sexName;
    }

    public void setSexName(String sexName) {
        this.sexName = sexName;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }
}

Vo對實體的性別進行了轉換,這樣在前臺頁面可以更好的進行展示。

接下來我們需要編寫一個控制器

控制器

package com.lay.rest.controller;

/**
 * @Description:
 * @Author: lay
 * @Date: Created in 14:58 2018/11/17
 * @Modified By:IntelliJ IDEA
 */
@Controller
public class UserController {

    //使用者服務介面
    @Autowired
    private UserService userService = null;

    //對映檢視
    @GetMapping("/restful")
    public String index() {
        return "/restful";
    }

    //轉換Vo變Entity
    private User changeToEntity(UserVo userVo) {
        User user = new User();
        user.setId(userVo.getId());
        user.setUserName(userVo.getUserName());
        user.setSex(SexEnum.getEnumById(userVo.getSexCode()));
        user.setNote(userVo.getNote());
        return user;
    }

    //轉換Entity變Vo
    private UserVo changeToVo(User user) {
        UserVo userVo = new UserVo();
        userVo.setId(user.getId());
        userVo.setUserName(user.getUserName());
        userVo.setSexCode(user.getSex().getId());
        userVo.setSexName(user.getSex().getName());
        userVo.setNote(user.getNote());
        return userVo;
    }

    //將Entity列表轉為Vo列表
    private List<UserVo> changeToVoes(List<User> userList) {
        List<UserVo> volist = new ArrayList<>();
        for (User user : userList) {
            UserVo userVo = changeToVo(user);
            volist.add(userVo);
        }
        return volist;
    }

    //將Vo列表轉為Entity列表
    private List<User> changeToEntities(List<UserVo> userVoList) {
        List<User> userlist = new ArrayList<>();
        for (UserVo userVo : userVoList) {
            User user = changeToEntity(userVo);
            userlist.add(user);
        }
        return userlist;
    }

    //結果Vo
    public class ResultVo {
        private Boolean success = null;
        private String message = null;

        public ResultVo() {

        }

        public ResultVo(Boolean success, String message) {
            this.success = success;
            this.message = message;
        }

        public Boolean getSuccess() {
            return success;
        }

        public void setSuccess(Boolean success) {
            this.success = success;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }

}

控制器定義了實體和VO互相轉換的方法和返回的處理結果集。

然後是用於測試的頁面

前臺頁面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta charset="UTF-8">
    <title>獲取請求頭引數</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.0.js"></script>
    <script type="text/javascript">
        //測試JavaSript程式碼
    </script>
</head>
<body>
<h1>測試Restful下的請求</h1>
</body>
</html>

接下來我們進行具體的REST開發

首先我們需要建立資源。

建立使用者

控制器

 //測試post請求, 新增使用者
    @PostMapping("/user")
    @ResponseBody
    public User insertUser(@RequestBody UserVo userVo) {
        User user = this.changeToEntity(userVo);
        return userService.inserUser(user);
    }

測試JavaSript程式碼

            //測試post請求 建立使用者
            function post() {
                var params={
                    'userName':'user_name_new',
                    'sexCode':1,
                    'note':'note_new'
                }
                $.post({
                    url:'./user',
                    contentType:"application/json",
                    data:JSON.stringify(params),
                    success:function (result) {
                        if(result==null||result.id==null){
                            alert("插入失敗");
                            return;
                        }
                        alert("插入成功");
                    }
                });
            }

獲取使用者

控制器

 //測試get請求 獲取使用者
    @GetMapping(value = "/user/{id}")
    @ResponseBody
    public UserVo getUser(@PathVariable("id") Long id) {
        User user = userService.getUser(id);
        return changeToVo(user);
    }

頁面

            //測試get請求 獲取使用者
            function get() {
                $.get("./user/1",function (user,status) {
                    if(user==null){
                        alert("結果為空");
                    }else {
                        alert("使用者資訊為:"+JSON.stringify(user));
                    }
                });
            }

條件獲取使用者

控制器

 //查詢符合要求的使用者
    @GetMapping("/users/{userName}/{note}/{start}/{limit}")
    @ResponseBody
    public List<UserVo> findUsers(
            @PathVariable("userName") String userName,
            @PathVariable("note") String note,
            @PathVariable("start") int start,
            @PathVariable("limit") int limit
    ) {
        List<User> userList = userService.findUsers(userName, note, start, limit);
        return this.changeToVoes(userList);
    }

頁面

//查詢符合要求的使用者
    @GetMapping("/users/{userName}/{note}/{start}/{limit}")
    @ResponseBody
    public List<UserVo> findUsers(
            @PathVariable("userName") String userName,
            @PathVariable("note") String note,
            @PathVariable("start") int start,
            @PathVariable("limit") int limit
    ) {
        List<User> userList = userService.findUsers(userName, note, start, limit);
        return this.changeToVoes(userList);
    }

修改使用者全部資訊

控制器

    //使用HTTP的put請求修改使用者資訊
    @PutMapping("/user/{id}")
    @ResponseBody
    public User updateUser(@PathVariable("id") Long id, @RequestBody UserVo userVo) {
        User user = this.changeToEntity(userVo);
        user.setId(id);
        userService.updateUser(user);
        return user;
    }

頁面

            // 測試修改使用者的Put請求
            //updateUser();
            function updateUser() {
                var params={
                    'userName':'user_name_1_new',
                    'sexCode':1,
                    'note':'note_new_1'
                }
                $.ajax({
                    url:'./user/1',
                    //此處告知使用put請求
                    type:'PUT',
                    contentType:'application/json',
                    data:JSON.stringify(params),
                    success:function (user,status) {
                        if(user==null){
                            alert("結果為空");
                        }else {
                            alert(JSON.stringify(user));
                        }
                    }
                });
            }

修改使用者指定資訊(姓名)

控制器

    //使用PATCH請求修改使用者名稱稱
    @PatchMapping("/user/{id}/{userName}")
    @ResponseBody
    public ResultVo changeUserName(@PathVariable("id") Long id, @PathVariable("userName") String userName) {
        int result = userService.updateUserName(id, userName);
        ResultVo resultVo = new ResultVo(result > 0, result > 0 ? "更新成功" : "更新使用者【" + id + "】失敗");
        return resultVo;
    }

頁面

            // 測試PATCH請求
            //updateUserName()
            function updateUserName() {
                $.ajax({
                    url:'./user/1/user_name_patch',
                    type:'PATCH',
                    success:function (result, status) {
                        if(result==null){
                            alert("結果為空");
                        }else {
                            alert(result.success?"更新成功":"更新失敗");
                        }
                    }
                })
            }

刪除使用者

控制器

    //使用HTTP的DELETE請求
    @DeleteMapping("/user/{id}")
    @ResponseBody
    public ResultVo deleteUser(@PathVariable("id") Long id) {
        int result = userService.deleteUser(id);
        ResultVo resultVo = new ResultVo(result > 0, result > 0 ? "更新成功" : "更新使用者【" + id + "】失敗");
        return resultVo;
    }

頁面

            //測試刪除使用者HTTP的DELETE請求
            //deleteUser()
            function deleteUser() {
                $.ajax({
                    url:'./user/1',
                    type:'DELETE',
                    success:function (result) {
                        if(result==null){
                            alert("結果為空");
                        }else {
                            alert(result.success?"刪除成功":"刪除失敗");
                        }
                    }
                })

            }

表單提交

前面的請求都是通過javascript來完成的。在一些表單的提交中,也許不需要在使用js,這是就需要使用別的方式提交。

控制器

    // 修改使用者名稱稱表單
    @PatchMapping("/user/name")
    @ResponseBody
    public ResultVo changeUserName2( Long id, String userName) {
        int result = userService.updateUserName(id, userName);
        ResultVo resultVo = new ResultVo(result > 0, result > 0 ? "更新成功" : "更新使用者【" 
            
           

相關推薦

REST開發REST風格端點

REST(二)開發REST風格端點 篇幅有限,這裡我們就不在贅述service和dao的設計和實現了,如果需要可以文章末尾檢視原始碼。 我們先定義使用者實體 實體 package com.lay.rest.entity; import com.lay.rest.enti

我是初學者第一次項目開發開發中遇到的問題和註意事項

持久層 數據庫 認識 碼代碼 操作 出錯 排序 文檔 項目 這周正式開始做項目練習,這才發現實際去做的時候會遇到和出現很多的問題 在這裏說一說我的體會,請指正 首先,實體類 1、實體類中有哪些屬性,類型是什麽,並根據屬性建立sql的相應表格, 2、哪些屬性需要在寫在實體

Exynos4412 學習 ——開發板啟動流程

一、撥碼開關對應的啟動方式 如下圖,XOM2,XOM3,XOM5用於控制 4412 啟動方式,AP_SLEEP,XEINT6 用於控制顯示卡輸出 具體使用如下: 對應於硬體原理圖是這樣的: 1、撥

Java開發微信公眾號——開發請求校驗程式

開發IDE:MyEclipse或Eclipse或IDEA都可以,我現在用的是MyEclipse。 請求校驗流程分析 上一篇中我們講了微信開發環境的搭建,下面就來寫請求校驗程式的開發,目的是是為了驗證訊息的確來自微信伺服器。 開發者提交資訊後,微信伺服器將傳送GET

Android Things入門---開發第一個Android Things程式

上一節介紹了開發環境的搭建,如果使用樹莓派的朋友可以先參考其他文章配置完之後再參考本節。 開發Android Things 的工具即為Android Studio。請自己下載安裝即可。 開啟Android Studio,原始介面如下。點選start a new Android Studio

asp.net——開發環境配置IIS安裝

以win7系統為例,其他型別。 1.安裝IIS 開啟檔案搜尋欄輸入:控制面板-》程式-》程式和功能-》開啟或關閉Windows功能,在開啟的對話方塊,選中Internet資訊服務打鉤。 啟動瀏覽器,會顯示IIS7的主頁,它的物理路徑為:C:\inetp

Zephyr學習開發環境搭建

一.概述 Zephyr支援在Windows、Linux和MacOS環境下開發,這裡只介紹如何在Windows下搭建zephyr的開發環境。 二.步驟 2.1安裝msys2 msys2是一個Linux模擬環境,類似於ArchLinux。 安裝完成後,要新增源(這與Linux環境是類似的),這裡我新增的

安裝Ubuntu後必須要做的幾件事--開發工具篇

連結 安裝完善的編輯套件 講開發沒有編譯器,那麼一切都是浮雲。 Ubuntu預設是不安裝g++的 sudo apt-get install build-essential 下面這些看自己愛好: 安裝詞法和語法分析器 sudo

Java程式設計師從笨鳥到菜鳥之三十七細談struts2開發第一個struts2的例項

歡迎關注微信賬號:java那些事:csh624366188.每天一篇java相關的文章 java交流工作群1: 77800592(已滿) java交流學生群2:234897635(已滿) java交流工作群3:94507287 java交流工作群4: 272265434 我的郵箱:

Hybrid app----開發主要應用技術

    在上一篇 Hybird App(一)—-第一次接觸 文章中,詳細的介紹了現階段手機APP的三大類,而Hybrid app結合Web app和Native app的優點,脫穎而出,變得越來越

SpringBoot-從入門到放棄 開發環境的搭建

        上一篇講到,雖然SB預設集成了很多東西很方便,但是天下沒有免費午餐,凡事都是雙刃劍,SB開發環境的搭建比普通的專案要複雜那麼一些,不像普通專案一樣,直接new project然後慢慢搭

【SpringMVC】8.REST風格的CRUD實戰之查詢操作

##注意!!! URI:emps 請求方式:GET 顯示效果 所以我們就圍繞這個需求來進行程式設計。 ##二、具體步驟 ###1.把Handler方法寫好 EmployeeHandler相關程式碼 package com.springmvc.cru

MyEclipse開發教程:使用REST Web Services管理JPA實體

MyEclipse 線上訂購年終抄底促銷!火爆開搶>> MyEclipse最新版下載 使用REST Web Services來管理JPA實體。在逆向工程資料庫表後生成REST Web服務,下面的示例建立用於管理部落格條目的簡單Web服務。你將學會: 利用資料庫逆向工程開

MyEclipse開發教程:REST Web Service

MyEclipse 線上訂購年終抄底促銷!火爆開搶>> MyEclipse最新版下載 使用MyEclipse開發RESTWeb服務來放大您的Web應用程式。在本教程示例中,您將建立一個簡單的Web服務來維護客戶列表。你將學會: 用於開發REST Web服務的過程

【Python】利用Django搭建REST風格API後臺服務關於JWT認證

原文地址 簡介 上一篇我們介紹瞭如何搭建一個後臺,並且提供API服務。 顯然那太簡單了,功能上是遠遠達不到使用的級別的。一套完整的API還需要擴充套件非常多的東西才能達到要求。 上個實驗只是搭建一個最簡單的後臺服務。細心的朋友可能會問了,一個api怎麼可以被隨意的

rest-assured介面自動化:往execl中增加用例,自動執行所有介面

利用空閒之餘,寫了第一個介面自動化測試demo, 通過讀取execl中的介面測試用例,介面自動執行。(這裡跟很多網上的介面自動化有點不同的是:無需再寫程式碼,只需要從execl中增加用例,就可執行)。 這是execl的模板: 這個模板可以很好的管理專案的各個模組,看起來也是簡潔,也是頗為喜

spring-cloud服務消費者rest+ribbon(Finchley版本)

在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務呼叫方式,一種是ribbon+restTemplate,另一種是feign ribbon是一個負載均衡客戶端,可以很好的控制http和tcp的一些行為。Feign預

SpringCloudRest微服務構建案例

架構: 以Dept部門模組做一個微服務通用案例,Consumer消費者(Client)通過REST呼叫Provider提供者(Server)提供的服務。 microservice-parent父工程(Project)下初次帶著3個子模組(Module) microservice-pa

企業級 SpringCloud 教程 服務消費者rest+ribbon

一、ribbon簡介 Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbo

企業級 SpringCloud 服務消費者rest+ribbon

ota ces 說明 源地址 地址 ted mapping rgs www 一、ribbon簡介 Ribbon is a client side load balancer which gives you a lot of control over the behavio