日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

springboot接收浏览器发送delete请求( method not allowed 405解决方法)

發布時間:2023/12/3 HTML 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot接收浏览器发送delete请求( method not allowed 405解决方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【README】

瀏覽器使用form提交信息的時候只支持GET和POST,如果需要在瀏覽器上使用PUT和DELETE請求方式的話,只能使用欺騙的方式了,SpringMvc提供了HiddenHttpMethodFilter類來提供支持;


【1】前端

1)list.html

<body><!-- 引入抽取的topbar --><!--模板名: 會使用 thymeleaf的前后綴配置規則進行解析 --><!--<div th:replace="~{dashboard::topbar}"></div-->><div th:replace="commons/bar::topbar"></div><div class="container-fluid"><div class="row"><!-- 引入側邊欄 --><!--<div th:replace="~{dashboard::#sidebar}"></div>--><div th:replace="commons/bar::#sidebar(activeUri='emps')"></div><main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"><h2><a class="btn btn-sm btn-success" href="emp" th:href="@{/emp}">員工添加</a></h2><div class="table-responsive"><table class="table table-striped table-sm"><thead><tr><td>id</td><td>lastName</td><td>email</td><td>gender</td><td>department</td><td>birth</td><td>操作</td></tr></thead><tbody><tr th:each="emp:${emps}"><td th:text="${emp.id}"></td><td>[[${emp.lastName}]]</td><td>[[${emp.email}]]</td><td th:text="${emp.gender=='0'?'女':'男'}"></td><td th:text="${emp.department.departmentName}"></td><td th:text="${#dates.format(emp.birth,'yyyy-MM-dd')}"></td><td><a class="btn btn-sm btn-primary" th:href="@{/emp/}+${emp.id}">編輯</a><button th:attr="del_uri=@{/emp/}+${emp.id}" class="btn btn-sm btn-danger deleteBtn">刪除</button></td></tr></tbody></table></div></main><form id="deleteEmpForm" method="post"><input type="hidden" name="_method" value="delete" /></form></div> </div>

其中刪除發送的是 rest風格的delete請求;

<button th:attr="del_uri=@{/emp/}+${emp.id}" class="btn btn-sm btn-danger deleteBtn">刪除</button><form id="deleteEmpForm" method="post"><input type="hidden" name="_method" value="delete" /> </form><script>$(".deleteBtn").click(function(){// 刪除當前員工 $("#deleteEmpForm").attr("action",$(this).attr("del_uri")).submit();return false;}); </script>

【2】springboot后端

EmployeeController 控制器

@Controller public class EmployeeController {@AutowiredEmployeeDao employeeDao;@AutowiredDepartmentDao departmentDao;// 查詢所有員工返回列表頁面@GetMapping(value="/emps")public String list(Model model) {Collection<Employee> employees = employeeDao.getAll();// 放在請求域中model.addAttribute("emps", employees);// thymeleaf 默認拼串// classpath:/templates/XXXX.htmlreturn "emp/list";}// 來到員工添加頁面@GetMapping("/emp")public String toAddPage(Model model) {// 來到添加頁面, 查詢所有部門,在頁面顯示Collection<Department> departments = departmentDao.getDepartments();model.addAttribute("depts", departments);return "emp/add";}// 員工添加功能,springmvc自動將請求參數和入參對象的屬性進行一一綁定 ,請求參數名字和javaBean入參屬性名是一致的@PostMapping("/emp")public String addEmp(Employee employee) {employeeDao.save(employee);/*** 添加成功后,來到員工列表頁面,emp/list.html,有兩種方式:* 方式1,redirect:/emps 重定向;方式2,forward: /emps 請求轉發;* 不能直接返回 /emps,因為thymeleaf模板引擎會解析為 emps.html*/return "redirect:/emps";}// 來到員工修改頁面, 查出當前員工,在頁面回顯@GetMapping("/emp/{id}")public String toEditPage(@PathVariable("id") Integer id, Model model) {// 頁面顯示所有部門列表model.addAttribute("depts", departmentDao.getDepartments());// 查詢員工model.addAttribute("emp", employeeDao.get(id));// 回到修改或編輯頁面(add是新增或編輯頁面)return "emp/add";}// 員工修改請求@PutMapping("/emp")public String toEditPage(Employee employee) {employeeDao.save(employee);return "redirect:/emps";}// 員工刪除請求@DeleteMapping("/emp/{id}")public String deleteEmployee(@PathVariable("id") Integer id) {employeeDao.delete(id);return "redirect:/emps";} }

其中處理刪除請求的映射如下:

// 員工刪除請求,接收delete請求@DeleteMapping("/emp/{id}")public String deleteEmployee(@PathVariable("id") Integer id) {employeeDao.delete(id);return "redirect:/emps";}

【3】點擊刪除

報錯:(type=Method Not Allowed, status=405?

?method not allowed 405,表示 服務器不接收delete請求;

原因: springboot 沒有啟用 HiddenHttpMethodFilter 過濾器來支持delete請求;

解決方法:在 application.properties 中啟用該過濾器, 如下:

application.properties # 啟動HiddenHttpMethodFilter過濾器,以支持瀏覽器可以發送DELETE PUT 請求 spring.mvc.hiddenmethod.filter.enabled=true

?重啟后,再次訪問,如下:


?【4】附錄:HiddenHttpMethodFilter

javax.servlet.Filter 將發布的方法參數轉換為 HTTP 方法,可通過 HttpServletRequest.getMethod() 檢索。 由于瀏覽器目前僅支持 GET 和 POST,因此一種常用技術(例如 Prototype 庫使用的技術)是使用帶有附加隱藏表單字段 (_method) 的普通 POST 來傳遞“真正的”HTTP 方法。 此過濾器讀取該參數并相應地更改 HttpServletRequestWrapper.getMethod() 返回值。 只允許使用“PUT”、“DELETE”和“PATCH”HTTP 方法。
請求參數的名稱默認為 _method,但可以通過 methodParam 屬性進行調整。

public class HiddenHttpMethodFilter extends OncePerRequestFilter {private static final List<String> ALLOWED_METHODS =Collections.unmodifiableList(Arrays.asList(HttpMethod.PUT.name(),HttpMethod.DELETE.name(), HttpMethod.PATCH.name()));/** Default method parameter: {@code _method}. */public static final String DEFAULT_METHOD_PARAM = "_method";private String methodParam = DEFAULT_METHOD_PARAM;/*** Set the parameter name to look for HTTP methods.* @see #DEFAULT_METHOD_PARAM*/public void setMethodParam(String methodParam) {Assert.hasText(methodParam, "'methodParam' must not be empty");this.methodParam = methodParam;}@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {HttpServletRequest requestToUse = request;if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {String paramValue = request.getParameter(this.methodParam);if (StringUtils.hasLength(paramValue)) {String method = paramValue.toUpperCase(Locale.ENGLISH);if (ALLOWED_METHODS.contains(method)) {requestToUse = new HttpMethodRequestWrapper(request, method);}}}filterChain.doFilter(requestToUse, response);}/*** Simple {@link HttpServletRequest} wrapper that returns the supplied method for* {@link HttpServletRequest#getMethod()}.*/private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper {private final String method;public HttpMethodRequestWrapper(HttpServletRequest request, String method) {super(request);this.method = method;}@Overridepublic String getMethod() {return this.method;}}}

總結

以上是生活随笔為你收集整理的springboot接收浏览器发送delete请求( method not allowed 405解决方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费高清成人 | 少妇69xx| 日韩不卡 | 东北少妇高潮抽搐 | 国产麻豆91视频 | 亚洲av无码一区二区乱孑伦as | 永久免费未满视频 | 国产精品伦一区二区三级视频 | 操小妞| 免费的黄色网 | 69天堂| 高贵麻麻被调教成玩物 | 日韩黄色视屏 | 天天干视频 | 99人妻少妇精品视频一区 | 国产一区二区三区免费观看 | 日韩美av| 黑人玩弄人妻一区二区三区影院 | 亚洲精品ww| 亚洲精品一区二区三区蜜臀 | 加勒比精品 | av资源在线看 | 九九热精品视频在线播放 | 色人阁在线视频 | 在线蜜桃| 国产不卡毛片 | 亚洲涩视频 | 亚洲iv一区二区三区 | www,色 | 亚洲超碰在线观看 | 麻豆成人91精品二区三区 | 久久久综合av | 欧美另类视频在线观看 | 黑人大群体交免费视频 | 午夜视频在线免费观看 | 热99这里只有精品 | 日韩一区二区三区av | 久久久久亚洲日日精品 | 隔壁人妻偷人bd中字 | 亚洲精品久久久久久一区二区 | 人妻巨大乳一二三区 | 国产精品16p| 色婷婷亚洲综合 | 国产欧美网站 | 欧美日日骚 | 国产精品九 | 黄色一级免费视频 | 最近中文字幕mv | 午夜视频在线观看国产 | 黄色网页观看 | 日xxxx| 国产观看 | 亚洲网站免费观看 | 成人免费视频a | 成人小网站 | 美女久久精品 | 亚洲国产电影在线观看 | 日韩区在线 | 日日爽夜夜操 | 亚洲va久久久噜噜噜无码久久 | 特级毛片在线播放 | 亚洲精品在线观看av | av不卡一区二区 | 韩国一区二区三区四区 | 亚洲搞av | 少妇太紧太爽又黄又硬又爽小说 | 日韩在线一 | 国产亚洲制服欧洲高清一区 | 国产一页| 青青草自拍视频 | 国产日韩一区二区三免费高清 | 美女张开腿让人桶 | 欧美一级专区免费大片 | 一眉道姑 | 国产电影一区二区三区爱妃记 | 国产肥老妇视频 | 欧美激情一区二区 | 欧美精品一区二区成人 | 干夜夜| 黄免费在线观看 | 成全影视在线观看第8季 | 亚洲av毛片一区二二区三三区 | 成人中文字幕在线 | 欧美videossex另类 | 性欧美大战久久久久久久免费观看 | 91娇羞白丝网站 | 国内激情自拍 | 在线观看的av | www色日本 | 伊人久久大香线蕉av一区 | 天天想你在线观看完整版电影免费 | 色悠悠久久综合 | 成人亚洲玉足脚交系列 | 影音先锋男人资源网站 | 午夜精品一区二区三区在线观看 | 极品美女被c | 久久综合五月 | 欧美日韩一区二区三区国产精品成人 | 欧美日韩国产91 |