由于某种原因导致的代码图像
我试图有一个小API运行。一切都运行好但我不得不做出一个加法和困惑。当我在URL中输入& localhost:8080/api/v1/{illness}"它会显示患有这种疾病的人的名字……救命。我已经包括了我的两个类。我没有把我的病人班算进去。的构造函数和getter/setter的名字,性别,疾病,和id。我也没有包括主井,因为它不需要
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;
}
}
控制器
如果你想获取某项内容的值你应该使用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)
中添加参数,并与path参数一起使用,因此它将是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)
的类型是病人,你比较它与字符串
Suggestion1:
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:您可以将其更改为使用蒸汽,过滤和收集列表
public List<Patient> patientIllness(String illness) {
return patientList.stream()
.filter(patient -> patient.getIllness().equals(illness))
.collect(Collectors.toList());
}
首先,您需要将控制器函数更改为如下内容:
@PostMapping("api/v1/patients/{illness}")
public List<Patient> patientIllness(@PathVariable String illness) {
return patService.patientIllness(illness)
}
我不明白你为什么用两个参数调用你的服务函数,因为它只能接受一个参数。您还需要使该函数返回患者列表,而不是返回null。而疾病只是一个路径变量,你在不同的函数中使用它,所以你应该理解它。在你的病人服务中,你只需要使用过滤器函数,所以它看起来像这样:
public List<Patient> patientIllness(String illness) {
return patientList.stream().filter(patient->patient.getIllness().equals(illness)).collect(Collectors.toList());
}
- 控制器中的
patientIllness
需要一个参数illness
来接受来自URL的疾病path variable
。name
变量也没有初始化(它提供给服务层,但不用于服务层)。因此,可以删除name
参数。 - 请求映射应该是GET来检索数据-推荐。
- 控制器中的
patientIllness
应该返回从服务层接收到的List<Patient>
。