Spring Web - 不允许使用 405 方法

Spring Web - 405 method not allowed

我最近尝试在 spring 中编写一个简单的 api。 当我用邮递员尝试时,仅有的两个工作端点是 fetchAllMoviecreateMovie。其他(带请求参数)给出响应:

{
    "timestamp": "2021-11-30T14:38:34.396+00:00",
    "status": 405,
    "error": "Method Not Allowed",
    "path": "/api/movies"
}

这是一个片段:

@RestController
@RequestMapping("/api/movies")
public class MovieController {

    @Autowired
    private MovieService movieService;

    @Autowired
    private MovieRepository movieRepository;

    @Autowired
    private MovieMapper movieMapper;

    @GetMapping
    public List<Movie> fetchAllMovie() {
        return movieService.getAllMovie();
    }

    @PostMapping
    public MovieDto createMovie(@RequestBody MovieCreationDto movieCreationDto) {
        Movie movie = movieMapper.creationDtoToModel(movieCreationDto);
        return movieMapper.modelToDto(movieRepository.save(movie));
    }

    @GetMapping("/{movieId}")
    public MovieDto fetchMovieById(@PathVariable("movieId") String movieId) throws MovieNotFoundException {
        Movie movie = movieRepository.findById(movieId).orElseThrow(MovieNotFoundException::new);
        return movieMapper.modelToDto(movie);
    }
}

因此,如果我发送 GET 请求,例如 http://localhost:8080/api/movies?movieId=619fa9d9b0c30252474b9a01,我会收到错误消息,但如果我发送 GETPOST 请求像 http://localhost:8080/api/movies 我可以从数据库中获取所有数据或者我可以 POST 在里面。 (当然有正确的请求体)

Note it: Not only the GET req not working. Anything with request parameter gives me this error.

@PathVariable 用于在路径中发送参数,例如:http://localhost:8080/api/movies/619fa9d9b0c30252474b9a01

如果你想使用你指定的URL发送,你需要使用注解@RequestParam

如果您使用 @PathVariable 作为输入参数,那么您应该按以下方式调用端点:

http://localhost:8080/api/movies/619fa9d9b0c30252474b9a01

如果您想使用 @RequestParameter 然后调用 api 像这样:

http://localhost:8080/api/movies?movieId=619fa9d9b0c30252474b9a01

快速总结: https://www.baeldung.com/spring-requestparam-vs-pathvariable