日韩性视频-久久久蜜桃-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解决方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品a | 人人澡人人爽 | 国产一级精品视频 | 日本wwwxxx| 黄片一区二区 | 白嫩初高中害羞小美女 | 麻豆三级视频 | 男人喷出精子视频 | 免费成人进口网站 | 免费黄色一区二区 | 锦绣未央在线观看 | 国产乱论 | 女同爱爱视频 | 日韩精品aaa | 男生操女生逼逼 | 69xxxx国产 | 福利视频午夜 | tube国产麻豆| 日本黄视频网站 | 亚洲成人一二三区 | 国产伦精品 | 毛片在线网| 亚洲成人免费看 | 精品一区二区视频在线观看 | 国产欧美一区二区三区白浆喷水 | 亚洲日本在线观看 | 伊人久久亚洲综合 | 91不卡视频 | 可以直接看av的网址 | 欲色综合 | 黄色片久久久 | 欧美精品观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧美爱爱小视频 | 青青色在线 | 一级片在线观看视频 | 国产三级国产精品国产国在线观看 | 人人干天天干 | 久久久精品免费看 | 黄色三级生活片 | 综合天天 | 99这里精品 | 亚洲精品一二三四区 | 国产黄免费 | 亚洲同性gay激情无套 | www久久久天天com | 高清久久久久久 | 欧美在线观看视频一区 | 捆绑最紧bdsm视频 | 中文字幕精品久久久久人妻红杏1 | 国产手机看片 | 亚洲精品中文在线 | 欧美综合一区二区 | 依人在线| 午夜视频在线免费看 | 国产伦精品一区二区三区免费视频 | 欧美激情一区二区三区在线 | 日韩一区二区三区av | 日本不卡视频在线观看 | 999视频在线观看 | 精品乱人伦一区二区三区 | 久久国产精品久久精品国产 | 麻豆精品一区二区三区 | 国产91在线 | 亚洲 | 国产成年视频 | 在线国产不卡 | 欧美色999| av中文字幕在线播放 | 精品黑人一区二区三区国语馆 | 日韩国产网站 | 亚洲自拍图片 | 国产午夜精品在线 | 久久久精品人妻无码专区 | 99嫩草| 日韩首页 | 久久精品6 | 毛片999| 女同调教视频 | 亚洲国产视频一区二区三区 | 天天看天天做 | 性猛交xxxx | 亚洲二区视频 | 亚洲免费观看高清完整版在线 | 久久久午夜电影 | 激情文学欧美 | 国产精品一区二区三区高潮 | 亚洲精品国产欧美 | 中文字幕视频二区 | 亚洲女同一区 | 欧美v亚洲 | jlzzjlzz欧美大全 | 天天av天天操 | 欧美日韩色片 | 黄色成年人视频 | 韩国伦理片在线看 | 亚洲综合三区 | 国产成人免费片在线观看 | 丰满岳妇伦在线播放 | 亚洲精品久久久久久久久久久 |