REST API 在 Spring Boot 中删除 HTTP 请求

Posted

技术标签:

【中文标题】REST API 在 Spring Boot 中删除 HTTP 请求【英文标题】:REST API delete HTTP request in Spring Boot 【发布时间】:2021-09-22 03:27:17 【问题描述】:

我正在学习 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"

【问题讨论】:

你能 ping 错误吗 删除后也可以返回任何内容。 您的问题中没有足够的信息可供任何人帮助您。请发布邮递员的错误文本和您服务器的任何日志。看看how to ask 和或how to create a minimal reproducible example。 这是邮递员的错误: "timestamp": "2021-07-13T03:36:27.454+00:00", "status": 500, "error": "Internal Server Error", "path": "/courses/786" 这个错误来自邮递员从控制台ping错误。 【参考方案1】:

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

【讨论】:

我实现了一个 post http 请求也很好。我添加了课程 ID 为 786 的课程,然后我试图删除 ID 为 786 的同一课程,只是为了检查它是否删除 如果 courseId 存在与否这不是问题【参考方案2】:

使用 index not like object 删除对象。那个问题。

list.remove(index of the object);


Iterator<Object> li = list;

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

【讨论】:

我需要至少 15 个声望才能投票。但是非常感谢您,先生。【参考方案3】:

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

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

【讨论】:

我需要至少 15 个声望才能投票。但是非常感谢先生。你能告诉我为什么我们采用这种方法吗?【参考方案4】:

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

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

【讨论】:

以上是关于REST API 在 Spring Boot 中删除 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2 Rest Api Example

如何在 Spring Boot REST API 上设置超时?

Spring Boot - 模拟对外部 API 的 POST REST 请求

Spring boot 和 Jira REST API 在 maven 中给出依赖错误

使用 Spring Boot 和 JWT 保护 REST Api

Spring Boot Rest api 与 Spring Kafka