iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
0

明天又要上班啦 今天研究了許多的東西 卡了一陣子
原本想說一口氣要將配置改成 Spring Data REST 來建構 RESTful Web Service 不過要做的話可是要花費一番功夫,因為有些地方會讓編譯執行的時候發生衝突導致無法開啟我們的服務

我還是先用@RestController來建構我們的RESTful Web Service,如果你已經知道Spirng Data REST項目的話,那你是否跟我一樣剛開始在使用的時候發生了很多問題呢XDD

這篇沒要介紹Spring Data REST

前言

今天只是實作面的設計,對於程式碼的部分只提重點部分,如果有想到要補充的地方會再補上來

Richardson成熟度模型(Richardson Maturity Model)

由Richardson博士提出的RESTful Web Service的設計風格,將REST分成了0~3個層級模型

層級 敘述
Level 0 Http層-只需讓資源透過Http協定獲取可使用任何數據表達形式(EX:XML,JSON)
Level 1 資源層-資源與一個統一資源識別URL進行關聯 ex:/users包含所有用戶 /user/42包含特定用戶
Level 2 動作-主要動作有GET,PUT,DELETE,POST等其他動作 描述這API能完成什麼功能
Level 3 超媒體控制-透過超文本鏈結即可運行服務(EX:google map)

MemberApiController.java

package com.tutorial.Controller;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.tutorial.Dao.MemberApiRepository;
import com.tutorial.Model.Memberaccount;

@RestController
@RequestMapping("/memberApi")
public class MemberApiController {

	
	@Autowired
	MemberApiRepository memberapiRepository;
	
	@RequestMapping(value="/{id}")
	 public Optional<Memberaccount> read(@PathVariable long id) {
		return memberapiRepository.findById(id);
	 }
	
	@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
	 public void create(@RequestBody Memberaccount memberaccount) {
		memberapiRepository.save(memberaccount);
	 }
	
	@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
	 public void update(@RequestBody Memberaccount memberaccount) {
		memberapiRepository.save(memberaccount);
		
	 }	
	@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
	 public void delete(@PathVariable long id) {
		memberapiRepository.deleteById(id); 
		 
	 }	
}

Memberaccount.java

package com.tutorial.Model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Memberaccount{
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private long id;
  private String email;
  private String cellphone;
  private String password;
  private String address;
  
  public Memberaccount() {
  }

public long getId() {
	return id;
  }
  
  public void setId(long id) {
	this.id = id;
  }
  public String getEmail() {
	return email;
  }
  
  public void setEmail(String email) {
	this.email = email;
  }
  
  public String getCellphone() {
	return cellphone;
  }
  
  public void setCellphone(String cellphone) {
	this.cellphone = cellphone;
  }
  
  public String getPassword() {
	return password;
  }
  
  public void setPassword(String password) {
	this.password = password;
  }
  
  public String getAddress() {
	return address;
  }
  
  public void setAddress(String address) {
	this.address = address;
  }


}

MemberApiRepository.java(Interface)

package com.tutorial.Dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.tutorial.Model.Memberaccount;

public interface MemberApiRepository  extends JpaRepository<Memberaccount, Long>{


	//Memberaccount findByIdStartsWith(String id);
	

}

參考資源

(https://fastfoodcoding.com/tutorials/1505105199524/crud-operations-using-spring-boot-jpa-hibernate-postgresql )

(https://read01.com/xOL668.html )

重點說明

  • CRUD中每種方法都有對應的HTTP Method(請求方法)定義在HTTP協定當中,
    1.GET-只做訪問請求資源
    2.POST-新增資源
    3.PUT-修改資源
    4.DELETE-刪除資源

  • MemberApiRepository中沒有任何實作因為我們都只使用繼承JpaRepository而來的方法

  • Memberaccountid要使用為long這是JpaRepository已經定義接受的型態,如果要自定義為int則要客製化自己的Query否則型態轉換會報錯

  • Memberaccountid要使用為long這是JpaRepository可以修改為你要的型態在extends JpaRepository<Memberaccount, Long> 中,ex: JpaRepository<Memberaccount, Integer>

  • 如果你是用MySQL 或MariaDB 在Model // @GeneratedValue(strategy=GenerationType.AUTO) 這行可以不需要註解掉因為MySQL中並沒有Sequence,MySQL可以裡直接設定ID的AI就能使用了

下一篇
如何使用ARC Client來請求REST 資源


上一篇
Day 18 Spring Boot RESTful Web Service (上)
下一篇
Day 20 使用Advanced REST client請求RESTful Web Service資源
系列文
30天學習Spring MVC30

1 則留言

0
theRookie
iT邦新手 5 級 ‧ 2019-10-17 11:40:33

Memberaccount.java
@Entity
下面給個
@Table(name = "member_account")

不然明天的文章會出現500

若有錯懇請告知
感謝寫文章的大大

我要留言

立即登入留言