出于某種原因的代碼影像
我正在嘗試運行一些 API。一切都運行良好,但我必須添加并感到困惑。當我輸入“localhost:8080/api/v1/{illness}”時,我必須在 URL 中輸入它,它會顯示患有該疾病的人的姓名......幫助。我已經包括了我擁有的兩個課程。我沒有包括我的病人班。它只是名稱、性別、疾病和 ID 的建構式和 getter/setter。我也沒有包括主井,因為它不需要
package com.sw409.Patientdemo.controller;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.sw409.Patientdemo.model.Patient;
import com.sw409.Patientdemo.service.PatientService;
@RestController
public class PatientController {
PatientService patService = new PatientService();
// CREATE
@PostMapping("api/v1/patients")
public Patient addPatient(@RequestBody Patient p) {
return patService.addPatient(p);
}
//GET ILLNESS (HELP!!!!!!!!!!!!!!!!!!!!!!!)
@PostMapping("api/v1/patients/{illness}")
public void patientIllness() {
return patService.patientIllness(name, illness)
}
// READ
@GetMapping("api/v1/patients")
public List<Patient> getPatient() {
return patService.getPatients();
}
// UPDATE
@PatchMapping("api/v1/patient/{patid}")
public void updatePatient(@PathVariable("patid") Integer id, @RequestBody Patient p) {
patService.updatePatient(id, p);
}
// DELETE
@DeleteMapping("api/v1/patient/{patid}")
public void deletePatient(@PathVariable("patid") Integer id) {
patService.deletePatient(id);
}
}
package com.sw409.Patientdemo.service;
import java.util.*;
import com.sw409.Patientdemo.model.Patient;
public class PatientService {
List<Patient> patientList = new ArrayList<>();
// Create
public Patient addPatient(Patient pat) {
patientList.add(pat);
return pat;
}
public List<Patient> getPatients() {
return patientList;
}
//(HELPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP)
public void patientIllness(String illness) {
for (int i = 0; i < patientList.size(); i ) {
if (patientList.get(i).equals(illness){
}
}
}
public void updatePatient(Integer id, Patient p) {
for (int i = 0; i < patientList.size(); i ) {
if (patientList.get(i).getId().equals(id)) {
patientList.set(i, p);
}
}
}
public void deletePatient(Integer id) {
for (int i = 0; i < patientList.size(); i ) {
if (patientList.get(i).getId().equals(id)) {
patientList.remove(i);
}
}
}
}
package com.sw409.Patientdemo.model;
public class Patient {
String name;
Integer id;
String gender;
String illness;
public Patient(String name, Integer id, String gender, String illness) {
super();
this.name = name;
this.id = id;
this.gender = gender;
this.illness = illness;
}
public Patient() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getIllness() {
return illness;
}
public void setIllness(String illness) {
this.illness = illness;
}
}
uj5u.com熱心網友回復:
控制器
如果您想獲取某些內容的值,您應該使用 GET 而不是 POST,因為 POST 用于創建或保存某些內容
您的代碼:
@PostMapping("api/v1/patients/{illness}")
public void patientIllness() {
return patService.patientIllness(name, illness)
}
- 缺少引數
patientIllness(),這就是它無法將值傳遞給服務的原因 - 回傳型別是 void 所以你仍然不能得到任何東西
建議:
@GetMapping("api/v1/patients/{illness}")
public List<Patient> patientIllness(@PathVariable String illness) {
return patService.patientIllness(illness);
}
- 添加引數
patientIllness(String illness)并將其與路徑引數一起使用,因此它將是patientIllness(@PathVariable String illness) - 如果您想知道患者串列,回傳型別應該是您想知道的,回傳應該是
List<Patient>
服務
您的代碼:
public void patientIllness(String illness) {
for (int i = 0; i < patientList.size(); i ) {
if (patientList.get(i).equals(illness){
}
}
}
- 回傳型別是 void 所以如果你想回傳一些東西給控制器你可以改變它
- 這段代碼中的
patientList.get(i).equals(illness)型別patientList.get(i)是 Patient 并且你將它與 String 進行比較
建議1:
public List<Patient> patientIllness(String illness) {
List<Patient> result = new ArrayList<>();
for (int i = 0; i < patientList.size(); i ) {
if (patientList.get(i).getIllness().equals(illness)) {
result.add(patientList.get(i));
}
}
return result;
}
- 回傳型別將是
List<Patient> - 你應該和同型別比較
patientList.get(i).getIllness().equals(illness)
建議2:您可以更改為每個
public List<Patient> patientIllness(String illness) {
List<Patient> result = new ArrayList<>();
for (Patient patient : patientList) {
if (patient.getIllness().equals(illness)) {
result.add(patient);
}
}
return result;
}
建議3:可以改成使用steam,過濾,收藏到list
public List<Patient> patientIllness(String illness) {
return patientList.stream()
.filter(patient -> patient.getIllness().equals(illness))
.collect(Collectors.toList());
}
uj5u.com熱心網友回復:
首先,您需要將控制器功能更改為如下所示:
@PostMapping("api/v1/patients/{illness}")
public List<Patient> patientIllness(@PathVariable String illness) {
return patService.patientIllness(illness)
}
我不明白你為什么用兩個引數呼叫你的服務函式,因為它只能接受一個。您還需要使此函式回傳患者串列而不是 void。而疾病只是一個路徑變數,你在不同的函式中使用它,所以你應該理解它。在你的病人服務中,你只需要使用過濾功能,所以它看起來類似于:
public List<Patient> patientIllness(String illness) {
return patientList.stream().filter(patient->patient.getIllness().equals(illness)).collect(Collectors.toList());
}
uj5u.com熱心網友回復:
patientIllness在控制器中需要一個引數illness來接受path variable來自 URL 的疾病。也name變數未初始化(其被提供給服務層,但是在服務層不使用)。因此name可以洗掉該引數。- 請求映射應該是 GET 來檢索資料 - 推薦。
patientIllness在控制器中應該回傳一個List<Patient>從服務層收到的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323623.html
下一篇:忽略最后一個空格的Regex
