REST API 在 Spring 引导中删除 HTTP 请求
REST API delete HTTP request in Spring Boot
我正在学习 REST API。我正在尝试从列表中删除一个元素。我试过了,但邮递员出错了。谁能帮助我哪里出错了?
另外,删除后的对象可以return吗?我也试过了,但我想我在删除代码时搞砸了。所以它不起作用。
控制器代码如下:
@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 引导中没有错误。
我在邮递员那里遇到的错误在这里:
{
"timestamp": "2021-07-13T03:36:27.454+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/courses/786"
}
检查您的列表中是否存在课程 ID 786。
使用与对象不同的索引删除对象。就是这个问题。
list.remove(index of the object);
Iterator<Object> li = list;
While(li.hasNext()){
Object obj= li.next();
If(courseId==id){
Ii.remove();
}
}
根据您的代码,foreach 不能用于删除 item,您应该使用 Iterator.
for (Iterator<Course> iterator = list.iterator(); iterator.hasNext(); ) {
Course course = iterator.next();
if (course.getId() == courseId) {
iterator.remove();
}
}
您正试图将 courseId 作为“786”传递,但您的 ArrayList 中不存在。如果您仍想删除它,请在您的课程列表中添加一个 courseId 为“786”的课程。
当我尝试删除 ID 为 786 的课程时,它会显示所有其他课程,因为列表中不存在课程 ID 786。
我正在学习 REST API。我正在尝试从列表中删除一个元素。我试过了,但邮递员出错了。谁能帮助我哪里出错了? 另外,删除后的对象可以return吗?我也试过了,但我想我在删除代码时搞砸了。所以它不起作用。
控制器代码如下:
@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 引导中没有错误。
我在邮递员那里遇到的错误在这里:
{
"timestamp": "2021-07-13T03:36:27.454+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/courses/786"
}
检查您的列表中是否存在课程 ID 786。
使用与对象不同的索引删除对象。就是这个问题。
list.remove(index of the object);
Iterator<Object> li = list;
While(li.hasNext()){
Object obj= li.next();
If(courseId==id){
Ii.remove();
}
}
根据您的代码,foreach 不能用于删除 item,您应该使用 Iterator.
for (Iterator<Course> iterator = list.iterator(); iterator.hasNext(); ) {
Course course = iterator.next();
if (course.getId() == courseId) {
iterator.remove();
}
}
您正试图将 courseId 作为“786”传递,但您的 ArrayList 中不存在。如果您仍想删除它,请在您的课程列表中添加一个 courseId 为“786”的课程。
当我尝试删除 ID 为 786 的课程时,它会显示所有其他课程,因为列表中不存在课程 ID 786。