Spring Web - 不允许使用 405 方法
Spring Web - 405 method not allowed
我最近尝试在 spring 中编写一个简单的 api。
当我用邮递员尝试时,仅有的两个工作端点是 fetchAllMovie
和 createMovie
。其他(带请求参数)给出响应:
{
"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
,我会收到错误消息,但如果我发送 GET 或POST 请求像 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
我最近尝试在 spring 中编写一个简单的 api。
当我用邮递员尝试时,仅有的两个工作端点是 fetchAllMovie
和 createMovie
。其他(带请求参数)给出响应:
{
"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
,我会收到错误消息,但如果我发送 GET 或POST 请求像 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