REST API 在 Spring Boot 中删除 HTTP 请求

问题描述

我正在学习 REST API。我正在尝试从列表中删除一个元素。我试过了,但邮递员出错了。谁能帮助我哪里出错了? 另外,我们可以在删除后返回对象吗?我也试过了,但我想我在删除代码中搞砸了。所以它不起作用。

这是控制器代码

@RestController
public class SpringRestController {
    
@Autowired
private CourseService courseService;

//Get the courses
@GetMapping("/courses")
public List<Course> getCourses()
{
    return this.courseService.getCourses();
}

@GetMapping("/courses/{courseId}")
public Course getCourse(@PathVariable String courseId)
{
    return this.courseService.getCourse(Long.parseLong(courseId));
}

//Add a course
@PostMapping("/courses")
public Course addCourse(@RequestBody Course course)
{
    return this.courseService.addCourse(course);
}

@PutMapping("/courses/{courseId}")
public Course updateCourse(@PathVariable String courseId,@RequestBody Course course)
{
    return this.courseService.updateCourse(Long.parseLong(courseId),course);
}

@DeleteMapping("/courses/{courseId}")
public List<Course> deleteCourse(@PathVariable String courseId)
{
    return (List<Course>) this.courseService.deleteCourse(Long.parseLong(courseId));    
    
}
}

这里是请求的服务实现:

@Service
public class CourseServiceImpl implements CourseService {

List<Course> list;

public CourseServiceImpl()
{
    list = new ArrayList<>();
    list.add(new Course(145l,"Java Array","Basic Array"));
    list.add(new Course(123l,"Java Constructor","Basic Constructor"));
}

@Override
public List<Course> getCourses() {
    return list;
}

@Override
public Course getCourse(long courseId) {
    Course c = null;
    for(Course course:list)
    {
        if(course.getId()==courseId)
        {
            c=course;
            break;
        }
    }
    return c;
}

@Override
public Course addCourse(Course course) {
    list.add(course);
    return course;
}

@Override
public Course updateCourse(long courseId,Course course) {
    Course c = null;
    for(Course cour:list)
    {
    if(cour.getId()==courseId)
    {
        cour.setTitle(course.getTitle());
        cour.setDescription(course.getDescription());
        c=cour;
    }
    }   
    return c;       
}

@Override
public List<Course> deleteCourse(long courseId) {
    
    for(Course course:list)
    {
        if(course.getId()==courseId)
        {           
            list.remove(course);
        }
    }       
    return list;        
}
}

spring boot 没有错误

我在邮递员那里遇到的错误在这里

{
"timestamp": "2021-07-13T03:36:27.454+00:00","status": 500,"error": "Internal Server Error","path": "/courses/786"
}

解决方法

根据你的代码,foreach不能用来删除item,你应该使用Iterator

for (Iterator<Course> iterator = list.iterator(); iterator.hasNext(); ) {
    Course course = iterator.next();
    if (course.getId() == courseId) {
        iterator.remove();
    }
}
,

使用与对象不同的索引删除对象。那个问题。

list.remove(index of the object);


Iterator<Object> li = list;

While(li.hasNext()){
 Object obj= li.next();
 If(courseId==id){
 Ii.remove();
 }
}
,

您正在尝试将 courseId 传递为“786”,而这在您的 ArrayList 中不存在。如果您仍想删除它,请在您的课程列表中添加一个课程 ID 为“786”的课程。

当我尝试删除 ID 为 786 的课程时,它会显示所有其他课程,因为 courseId 786 不在列表中。

,

检查课程 ID 786 是否存在于您的列表中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...