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預
SpringCloud(二)Rest微服務構建案例
架構:
以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