【问题标题】:Spring Web - 405 method not allowedSpring Web - 405 方法不允许
【发布时间】:2022-01-07 07:12:17
【问题描述】:

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

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

这是一个sn-p:

@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);
    }
}

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

注意:不仅 GET 请求不起作用。任何带有请求参数的东西都会给我这个错误。

【问题讨论】:

    标签: spring spring-boot api spring-mvc backend


    【解决方案1】:

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

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

    【讨论】:

    • 我理解了这个问题,但我没有运气。将每个@PathVariable 转换为@RequestParam,但错误仍然存​​在。
    • 如果你改成request参数,你也应该把@GetMapping("/{movieId}")改成@GetMapping("something")然后使用localhost:8080/api/movies/…,你已经有空的@GetMapping获取所有电影
    • 非常感谢。这解决了问题。
    【解决方案2】:

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

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

    如果您想使用 @RequestParameter,请像这样调用 api:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2018-02-04
      • 2016-03-23
      • 2014-09-19
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多