iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Modern Web

前後端整合,用Spring boot 與React 開發屬於自己的記帳網頁系列 第 9

Day9 建置後端單一查詢與全部查詢兩支API

  • 分享至 

  • xImage
  •  

前言

我們在前一天教大家從Service到Controller的技術,這個技術就是整個開發的核心技術,當大家學會前一天的技術,對於後端開發就會有基本的觀念。

那接下來,我們就要繼續開發剩下的後端功能。

前面我們已經教了大家把資料輸入到資料庫中,接下來就是要寫另一個後端,來取得這些資料庫的功能。

我們一次來開發兩個功能,單一查詢跟全部查詢。

查詢功能開發

首先,我們再次進入Interface的Service層,新增以下兩個功能。

	AccountDto getAccount(Long id);
	List<AccountDto> getAllAccounts();

我們在開發任何功能的時候,盡量把功能寫得清晰易懂,這邊可以看到,第一個功能getAccount就是要取得單一的查詢項目,第二個getAllAccounts就是要取得所有的清單。

在前一天我們有教,功能左邊指的是回傳的項目,()內指的是要輸入的參數,第一筆資料回傳的就是給前端使用的單一Account資料,我們要輸入的就是這個資料的id

第二個就是用清單的方式回傳所有的AccountDto,我們並不需要輸入任何的參數。
在我們在Service層輸入好之後,進入Impl層,就會看到這裡又有出現紅色的底線,我們可以用同樣的方式,把滑鼠移動到下面,然後直接選add來增加我們寫好的兩個功能。
https://ithelp.ithome.com.tw/upload/images/20240919/20152864PAl0yploV5.png
我們可以在getAcount寫下這些程式碼

	@Override
	public AccountDto getAccount(Long id) {
		Account account = accountRepository.findById(id);
		return null;
	}

這個意思就是我們要藉由accountRepository的findByID功能來取得我們要的資料庫,這個時候,我們會發現底下出現紅字。
https://ithelp.ithome.com.tw/upload/images/20240919/20152864sWrTBToRUS.png
這是因為這個系統判斷這個指令不完整,我們並沒有告訴系統如果出現錯誤訊息的時候應該要怎麼做,這個時候,我們可以增加orElseThrow()這個指令。

這就是告訴系統如果出現錯誤訊息的時候,我們應該要做甚麼事情。

	@Override
	public AccountDto getAccount(Long id) {
		Account account = accountRepository.findById(id).orElseThrow();
		return null;
	}

這個時候,我們就要宣告錯誤訊息應該要做甚麼,所以我們回到Accounting資料夾,在底下新增exception,然後新增這個ResourceNotFoundException這個Class。
https://ithelp.ithome.com.tw/upload/images/20240919/20152864Duxse75JPT.png
在這個Class中我們要寫下以下的程式碼。

package net.Eric.accounting.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@SuppressWarnings("serial")
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException{
	
	public ResourceNotFoundException(String message) {
		super(message);
	}
}

寫好了之後,我們再回到ServiceImpl的程式碼中,把所有的功能都寫完。

	@Override
	public AccountDto getAccount(Long id) {
		Account account = accountRepository.findById(id)
				.orElseThrow(()-> new ResourceNotFoundException("Account not found with id:"+id));
		return modelMapper.map(account, AccountDto.class);
	}

	@Override
	public List<AccountDto> getAllAccounts() {
		List<Account> accounts = accountRepository.findAll();
		return accounts.stream().map((account)->modelMapper.map(account,AccountDto.class)).collect(Collectors.toList());
	}

設置Controller

寫完之後,我們要回到Controller資料夾中去設置怎麼去使用這些Service
Controller層的程式碼如下

	@GetMapping("/{id}")
	public ResponseEntity<AccountDto> getAccount(@PathVariable("id") Long id){
		AccountDto accountDto = accountsService.getAccount(id);
		return new ResponseEntity<>(accountDto, HttpStatus.OK);
	}
	
	@GetMapping
	public ResponseEntity<List<AccountDto>> getAllAccounts(){
		List<AccountDto> accountDtos = accountsService.getAllAccounts();
		return new ResponseEntity<>(accountDtos,HttpStatus.OK);
	}

啟動Spring boot,只要順利啟動,就代表有成功設置這些程式碼。

測試開發成果

接下來我們要測試我們的開發成果,我們要到Postman中,在啟動Postman後輸入底下的http://localhost:8080/api/accounts/1
然後輸入Send,只要底下有成功回傳,就代表我們完成了第一個單一查詢功能。
https://ithelp.ithome.com.tw/upload/images/20240919/20152864WNv4mkkEt3.png
接下來要測試全部查詢功能,我們再創建一個Postman,然後輸入http://localhost:8080/api/accounts/
這個時候按下Send,只要有回傳底下的清單,或是200 OK,那就代表我們有成功的開發完成全部查詢功能。
https://ithelp.ithome.com.tw/upload/images/20240919/20152864PcF3qNMROs.png
到這一天,恭喜大家又完成了後端的兩支API開發!


上一篇
Day8 記帳輸入功能-創建 Service跟Controller
下一篇
Day10 開發後端Spring boot修改與刪除記帳清單的API
系列文
前後端整合,用Spring boot 與React 開發屬於自己的記帳網頁30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言