首页 > 解决方案 > 后映射不起作用,给出 405 方法不允许错误

问题描述

所以我一直在关注 Java Brains 的 Spring Boot 快速入门课程,我遇到了一个问题,它的想法是开设与某个主题相关的课程,这样你的 url 就会显示为“...... /topics/{topicId}/courses/{id}" 用于任何给定的课程。

我的大多数控制器映射都正常工作,但是我遇到了 POST 和 PUT 问题(可能是 DELETE 但无法测试它),它给了我以下错误(我正在使用邮递员发出请求):

{
    "timestamp": "2021-05-16T22:10:18.049+00:00",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "",
    "path": "/topics/chem/courses"
}

我已经向“http://localhost:8080/topics”发出了 POST 请求以添加化学主题,当我执行 GET 时它会显示出来,但是如果我尝试 POST 到“http://localhost: 8080/topics/chem/courses”它给出了上述错误。

我的控制器是这样构建的:

@RestController
public class CourseController {

    private final CourseService courseService;

    public CourseController(CourseService courseService) {
        this.courseService = courseService;
    }

    @GetMapping("/topics/{topicId}/courses")
    public List<Course> getAllCourses(@PathVariable String topicId) {
        return courseService.getCourses(topicId);
    }
    @GetMapping("/topics/{topicId}/courses/{id}")
    public Course getCourse(@PathVariable String topicId, @PathVariable String id) {
        return courseService.getCourse(id);
    }

    @PostMapping(value = "/topics/{topicId}/courses}")
    public void addCourse(@RequestBody Course course, @PathVariable String topicId) {
        course.setTopic(new Topic(topicId, "", ""));
        courseService.addCourse(course);
    }

    @PutMapping("/topics/{topicId}/courses/{id}")
    public void updateCourse(@RequestBody Course course, @PathVariable String topicId) {
        course.setTopic(new Topic(topicId, "", ""));
        courseService.updateCourse(course);
    }

    @DeleteMapping("/topics/{topicId}/courses/{id}")
    public void deleteCourse(@PathVariable String topicId, @PathVariable String id) {
        courseService.deleteCourse(id);
    }
}

据我所知,它没有理由给出这个错误,如果有人对发生的事情有任何见解,将不胜感激,Spring调试日志也在下面,以防对任何人有帮助:

在此处输入图像描述

标签: javaspring-bootpost

解决方案


推荐阅读