我是Java Spring的新手,我现在正在学习它。我试着更新我的简单的"你好,世界"Spring MVC应用程序。这不是一个Spring Boot应用程序,这就是为什么没有应用程序。项目中的设置文件。资源文件夹(但实际上资源不是一个文件夹-它是链接到项目的设置,在那里我找不到问题的解决方案)。因此,当我运行这个应用程序并打开edit.html页面时,其中:method="PATCH"参数,我得到上面的错误。
edit.html页面代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Update Person</title>
</head>
<body>
<!-- we have to use 'th:' because standard formatting does not support PATCH method (only GET and POST) -->
<form th:method="PATCH" th:action="@{/people/{id}(id=${person.getId()})}" th:object="${person}">
<label for="name">Enter name: </label>
<input type="text" th:field="*{name}" id="name"/>
<br/>
<input type="submit" value="Update!"/>
</form>
</body>
</html>
控制器方法:
// Open page to edit person`s fields
@GetMapping("/{id}/edit")
public String edit(@PathVariable("id") int id, Model model) {
// to edit data, we better see what we will edit:
model.addAttribute("person", personDAO.show(id));
return "people/edit";
}
// by method PATCH from edit form we get object Person to update person`s data by id
@PatchMapping("/{id}")
public String update(@ModelAttribute("person") Person person, @PathVariable("id") int id) {
personDAO.update(id, person);
return "redirect:/people";
}
我使用下面的代码在我的公共类MySpringMvcDispatcherServletInitializer扩展AbstractAnnotationConfigDispatcherServletInitializer类来允许隐藏http方法:
@Override
public void onStartup(ServletContext aServletContext) throws ServletException {
super.onStartup(aServletContext);
registerHiddenFieldFilter(aServletContext);
}
private void registerHiddenFieldFilter(ServletContext aContext) {
aContext.addFilter("hiddenHttpMethodFilter",
new HiddenHttpMethodFilter()).addMappingForUrlPatterns(null, true, "/*");
}
我使用jakarta的依赖性,因为javax不再工作了:
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
我想在我的html文件中使用PATCH, DELETE方法,但是正如我看到的,程序不识别我试图允许隐藏过滤器(上面的代码)。
项目结构为:
输入图片描述
我在论坛和互联网上寻找这个问题。但是人们到处都在谈论Spring Boot(在我的例子中不是——它是一个使用Spring MVC结构的简单web应用程序)和应用程序。设置文件。我的情况怎么了?
首先:"因为javax不再工作了";-这不是真的。您可以使用javax。Servlet-api 4.0.1没有任何问题。
看起来你所做的一切都是为了使用PATCH。尝试清理MAVEN(查看屏幕截图)并重新启动服务器。输入图片描述