摘要:我們需要在中聲明對應(yīng)的接口,并在值對象的方法上指定視圖,最后在方法上指定視圖即可。本文是針對基于服務(wù)開發(fā)的案例教程,多模塊開發(fā)的項(xiàng)目的基礎(chǔ)演進(jìn)。
RestFul API
一般的API都是什么樣子的呢?
查詢 /user/query?name=tom GET 詳情 /user/getInfo?id=1 GET 創(chuàng)建 /user/create?name=tom POST 修改 /user/update?id=1&name=jay POST 刪除 /user/delete?id=1 GET
那么我們希望的RESTFul API 是什么樣子的呢?
查詢 /user?name=tom GET 詳情 /user/1 GET 創(chuàng)建 /user POST 修改 /user/1 PUT 刪除 /user/1 DELETE
簡單的說,RESTFul就是:
1、用URL描述資源
2、使用HTTP方法描述行為,使用HTTP狀態(tài)碼來表示不同的結(jié)果
3、使用json交互數(shù)據(jù)
4、RESTFul只是一種風(fēng)格,并不是強(qiáng)制的標(biāo)準(zhǔn)
Level0:使用Http作為傳輸方式編寫第一個(gè)RESTFul API
Level1:引入資源概念,每個(gè)資源都有對應(yīng)的URL
Level2:使用HTTP方法進(jìn)行不同的操作,使用HTTP狀態(tài)碼來表示不同的結(jié)果
Level3:使用超媒體,在資源的表達(dá)中包含了鏈接信息
首先我們先了解一些常用的注解
1、@RestController 標(biāo)明此Controller提供RestAPI
2、@RequestMapping及其變體。映射http請求URL到j(luò)ava方法
3、@RequestParam 映射請求參數(shù)到j(luò)ava方法的參數(shù)
4、@PageableDefault指定分頁參數(shù)默認(rèn)值
直接拿出代碼模塊來講解吧!
package com.myself.web.controller; import com.fasterxml.jackson.annotation.JsonView; import com.myself.dto.User; import com.myself.dto.UserQueryCondition; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; /** * @author MySelf * @create 2018/9/15 * @desc User Controller 層 **/ @RestController @RequestMapping("/user") public class UserController { /** * 獲取用戶列表 * @RequestMapping(value = "/user", method = RequestMethod.GET) * @RequestParam(name = "username",required = false,defaultValue = "tom") String nickname * @param condition {@link UserQueryCondition} * @return {@link List} */ @GetMapping() @JsonView(User.UserSimpleView.class) public Listquery(UserQueryCondition condition,@PageableDefault(page = 2,size = 17,sort = "username,asc") Pageable pageable){ //反射工具 System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE)); System.out.println(pageable.getPageSize()); System.out.println(pageable.getPageNumber()); System.out.println(pageable.getSort()); List users = new ArrayList<>(); users.add(new User()); users.add(new User()); users.add(new User()); return users; } /** * 獲取用戶信息 正則校驗(yàn)參數(shù)必須為數(shù)字 * @RequestMapping(value = "/user/{id:d+}", method = RequestMethod.GET) * @param idxxx {@link String} * @return {@link User} */ @GetMapping("/{id:d+}") @JsonView(User.UserDetailView.class) public User getInfo(@PathVariable(name = "id") String idxxx){ User user = new User(); user.setUsername("tom"); return user; } }
User Bean 對象
package com.myself.dto; import com.fasterxml.jackson.annotation.JsonView; /** * @author MySelf * @create 2018/9/15 * @desc User Bean **/ public class User { /** 用戶簡單視圖 */ public interface UserSimpleView {} /** 用戶詳情視圖 */ public interface UserDetailView extends UserSimpleView {} /** 用戶名 */ private String username; /** 用戶密碼 */ private String password; @JsonView(UserSimpleView.class) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @JsonView(UserDetailView.class) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
接下來我們就來講解一些注解的使用點(diǎn),其實(shí)看著注解也能大致了解了。
首先我們在接受參數(shù)時(shí),可以使用@PathVariable映射url片段到j(luò)ava方法的參數(shù),同時(shí)也支持在url聲明中使用正則表達(dá)式,使用@JsonView控制json輸出內(nèi)容。
我們需要在Bean中聲明對應(yīng)的接口,并在值對象的get方法上指定視圖,最后在Controller方法上指定視圖即可。
還有就是,當(dāng)我們在處理創(chuàng)建請求時(shí),還要注意可以使用@RequestBody映射請求體到j(luò)ava方法參數(shù),且要注意對日期類型參數(shù)的處理,也可以使用@Valid注解和BindingResult驗(yàn)證請求參數(shù)的合法性并處理校驗(yàn)結(jié)果。
本文是針對UncleCatMySelf/myself-security(基于Spring Security + Spring Social + Spring Security OAuth + REST服務(wù)開發(fā)的案例教程,Maven多模塊開發(fā))的GitHub項(xiàng)目的基礎(chǔ)演進(jìn)。
如果本文對你有所幫助,歡迎關(guān)注本人技術(shù)公眾號,謝謝。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77159.html
摘要:方法和對應(yīng)的方法定義定義重啟服務(wù)器,運(yùn)行上面的程序。五添加支持實(shí)現(xiàn)跨域訪問當(dāng)訪問時(shí),你可能需要面對同源策略問題。錯(cuò)誤如下一般來說,在服務(wù)器端,我們在響應(yīng)中返回額外的訪問控制頭,實(shí)現(xiàn)跨域鏈接。 一、理解 REST REST(Representational State Transfer),中文翻譯叫表述性狀態(tài)轉(zhuǎn)移。是 Roy Thomas Fielding 在他2000年的博士論文中提出...
摘要:前言大致簡介項(xiàng)目主要逐步迭代講解服務(wù)開發(fā),通過實(shí)際的案例開發(fā)來講解,項(xiàng)目注解詳細(xì)適合作為教程案例,同時(shí)對代碼的演進(jìn)還有重構(gòu)也會(huì)有對應(yīng)的推文講解什么是登錄與賬戶安全大多數(shù)初級的程序員可能理解的比較簡單,即普通的表單登錄,數(shù)據(jù)查詢等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致簡介項(xiàng)目主要逐步迭代講解Spring Security + S...
摘要:前言大致簡介項(xiàng)目主要逐步迭代講解服務(wù)開發(fā),通過實(shí)際的案例開發(fā)來講解,項(xiàng)目注解詳細(xì)適合作為教程案例,同時(shí)對代碼的演進(jìn)還有重構(gòu)也會(huì)有對應(yīng)的推文講解什么是登錄與賬戶安全大多數(shù)初級的程序員可能理解的比較簡單,即普通的表單登錄,數(shù)據(jù)查詢等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致簡介項(xiàng)目主要逐步迭代講解Spring Security + S...
摘要:數(shù)據(jù)綁定入門學(xué)習(xí)總結(jié)時(shí)間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個(gè)人學(xué)習(xí)源碼第一章課程介紹數(shù)據(jù)綁定入門概述數(shù)據(jù)綁定概念來自百度百科簡單綁定是將一個(gè)用戶界面元素控件的屬性綁定到一個(gè)類型對象實(shí)例上的某個(gè)屬性的方法。 《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié) 時(shí)間:2017年2月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...
摘要:滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是。需要注意的是,是設(shè)計(jì)風(fēng)格而不是標(biāo)準(zhǔn)。同一個(gè)路徑,因?yàn)檎埱蠓绞降牟煌フ覍げ煌慕涌冢瓿蓪Y源狀態(tài)的轉(zhuǎn)變。一個(gè)符合風(fēng)格的就可以稱之一個(gè)的接口。 RESTful 相信在座的各位對于RESTful都是略有耳聞,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn)移是一組架構(gòu)約...
閱讀 2331·2021-11-24 10:27
閱讀 3576·2019-08-30 15:55
閱讀 3341·2019-08-30 15:53
閱讀 2342·2019-08-29 17:27
閱讀 1428·2019-08-26 13:47
閱讀 3547·2019-08-26 10:28
閱讀 913·2019-08-23 15:59
閱讀 2850·2019-08-23 15:19