You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Web调用带参数接口报405 Method Not Allowed问题求助

问题原因

你的接口定义中fetchMovieById使用了@PathVariable注解接收参数,对应@GetMapping("/{movieId}")的路径规则,要求参数必须放在URL路径中,而非作为查询参数拼接在?后面。
你当前请求的地址是http://localhost:8080/api/movies?movieId=619fa9d9b0c30252474b9a01,这个地址匹配到的是无后缀路径的/api/movies接口,该路径仅支持GET(查询全量)和POST(新增)两种请求方式,如果你用其他请求方式访问、或者Spring无法匹配到对应带参数的接口规则时,就会返回405 Method Not Allowed错误。

解决方案

方案1:调整请求URL适配现有接口

直接将参数放在URL路径中即可,比如查询单个电影的请求改为:
GET http://localhost:8080/api/movies/619fa9d9b0c30252474b9a01
其余带路径参数的PUT、DELETE等接口也遵循同样规则,把参数放到路径中而非作为查询参数传递即可正常访问。

方案2:修改接口适配查询参数传值

如果你确实需要使用?movieId=xxx的形式传参,可以调整接口定义,将路径变量改为查询参数,同时通过params属性避免和查询全量的接口冲突:

// 查询全量接口保持不变
@GetMapping
public List<Movie> fetchAllMovie() {
    return movieService.getAllMovie();
}

// 新增params限定,只有请求携带movieId参数时匹配该接口
@GetMapping(params = "movieId")
public MovieDto fetchMovieById(@RequestParam("movieId") String movieId) throws MovieNotFoundException {
    Movie movie = movieRepository.findById(movieId).orElseThrow(MovieNotFoundException::new);
    return movieMapper.modelToDto(movie);
}

内容的提问来源于stack exchange,提问作者csabit1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:05