"Method?Not?Allowed"405問題分析以及解決方法
首先,明確一點(diǎn)405問題就是瀏覽器端(或客戶端)請(qǐng)求方法和服務(wù)端處理該路徑的請(qǐng)求的處理方法不一致造成的。
背景:
SpringBoot2.70整合JPA,測(cè)試單表的增刪改查
現(xiàn)象:
在用postman測(cè)試delete方法的時(shí)候遇到的
圖1: postman測(cè)試截圖

圖2:后端代碼塊
package com.xxxx.salesforecast.Controller;
import com.xxxx.salesforecast.pojo.User;
import com.xxxx.salesforecast.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用戶外部接口
*
* @author : liuke
* @date : 2022-06-22 14:20
**/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
/**
* 插入
*
* @param user
* @return
*/
@PostMapping
public String addUser(@RequestBody User user) {
userRepository.save(user);
return "success";
}
/**
* 查詢?nèi)?
*
* @return
*/
@GetMapping("")
public List<User> getAllUser() {
List<User> userList = userRepository.findAll();
return userList;
}
/**
* 根據(jù) id 刪除
* @param id
* @return
*/
@DeleteMapping("/{id}")
public String deleteUserById(@PathVariable Integer id){
userRepository.deleteById(id.intValue());
return "success";
}
}圖三:控制臺(tái)報(bào)錯(cuò)

排查解決過程:
第一步:大致檢查一下自己代碼,感覺沒問題,開始百度
第二步:百度得到的第一個(gè)方案,未解決
application.yml中添加spring mvc: hiddenmethod: filter: enabled: true這個(gè)啟動(dòng)HiddenHttpMethodFilter過濾器,以支持瀏覽器可以發(fā)送DELETE PUT 請(qǐng)求。而我沒用瀏覽器發(fā)送請(qǐng)求,而是用postman,所以無用也正常。
第三步:嘗試將@DeleteMapping改成@RequestMapping,未解決
第四步:嘗試去掉@PathVariable 注解,未解決
第五步:想到,我用的是restful接口,增刪改查的路徑都是一樣,通過@PostMapping、@PutMapping、@DeleteMapping、@GeMapping來區(qū)分行為。
于是修改了方法的路徑,還是不行。但是這個(gè)時(shí)候不報(bào)405了,開始報(bào)404了。
404,眾所周知一定是沒有匹配的路徑。
然后我終于發(fā)現(xiàn)了問題的所在,下圖路徑
http://localhost:6060/user/delete?id=1
這里的id是以傳參的形式
而@DeleteMapping(“/delete/{id}”)的意思是id當(dāng)路徑
所以路徑改成
思考:那為什么之前都會(huì)報(bào)405的錯(cuò)誤呢?
因?yàn)槠ヅ涞搅瞬樵兊慕涌?,這個(gè)接口就是@GetMapping,所以和@DeleteMapping并不一致,就報(bào)了405錯(cuò)誤。

且這個(gè)接口不需要傳參,如果傳參了也是不會(huì)報(bào)錯(cuò)的,比如,我們?cè)L問http://baidu.com 和 http://baidu.com/?sbbaidu=1是一樣的
總結(jié):
題出在我把@DeleteMapping(“/{id}”)的id當(dāng)路徑和路徑傳參弄混了。
到此這篇關(guān)于"Method Not Allowed"405問題分析以及解決方法的文章就介紹到這了,更多相關(guān)Method Not Allowed 405問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java?SSM項(xiàng)目部署上線配置方法(阿里云服務(wù)器ECS?+?云數(shù)據(jù)庫RDS?MySQL)(寶塔)
這篇文章主要介紹了Java?SSM項(xiàng)目部署上線(阿里云服務(wù)器ECS?+?云數(shù)據(jù)庫RDS?MySQL)(寶塔)的圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01
java如何防止表單重復(fù)提交的注解@RepeatSubmit
@RepeatSubmit是一個(gè)自定義注解,用于防止表單重復(fù)提交,它通過AOP和攔截器模式實(shí)現(xiàn),結(jié)合了線程安全和分布式環(huán)境的考慮,注解參數(shù)包括interval(間隔時(shí)間)和message(提示信息),使用時(shí)需要注意并發(fā)處理、用戶體驗(yàn)、性能和安全性等方面,失效原因是多方面的2024-11-11
詳解Java并發(fā)包中線程池ThreadPoolExecutor
ThreadPoolExecutor是Java語言對(duì)于線程池的實(shí)現(xiàn)。線程池技術(shù)使線程在使用完畢后不回收而是重復(fù)利用。如果線程能夠復(fù)用,那么我們就可以使用固定數(shù)量的線程來解決并發(fā)問題,這樣一來不僅節(jié)約了系統(tǒng)資源,而且也會(huì)減少線程上下文切換的開銷2021-06-06
關(guān)于Prometheus + Spring Boot 應(yīng)用監(jiān)控的問題
這篇文章主要介紹了關(guān)于Prometheus + Spring Boot 應(yīng)用監(jiān)控的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java正則表達(dá)式,提取雙引號(hào)中間的部分方法
今天小編就為大家分享一篇Java正則表達(dá)式,提取雙引號(hào)中間的部分方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
java?數(shù)組越界判斷和獲取數(shù)組長度的實(shí)現(xiàn)方式
這篇文章主要介紹了java?數(shù)組越界判斷和獲取數(shù)組長度的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

