当我单击HTML表单上的提交时,它没有达到/ greeting端点
const imageData = await Image.query().where('product_id', product.id).fetch();
const images = imageData.toJSON();
Thymeleaf配置
@org.springframework.stereotype.Controller
@EnableAutoConfiguration
public class Controller {
@Autowired
assessment.PdfGeneratorUtil pdfGenaratorUtil;
@GetMapping ("/")
String home() {
return "static/assessment.html";
}
@PostMapping("/greeting")
public String greetingSubmit() {
Map<String,String> data = new HashMap<String,String>();
data.put("name","James");
以及html的摘要:
@Configuration
public class TheymeLeafConfiguration {
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver emailTemplateResolver=new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("templates/");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("XHTML");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
}
当我提交表单时,未在POST控制器上击中断点(与Map相同的行),并且在浏览器中得到405:
<form action="#" th:action="@{/greeting}" method="post">
提交后浏览器中的URL是:
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'POST' not supported
项目结构:
更新
它正在使用此代码,只要它命中了Get控制器方法,以及提交时的Post控制器方法。我不太确定发生了什么变化。
请注意,由于我正在测试是否在正确的时间调用了控制器方法,因此我目前未使用 @ModelAttribute 。
http://localhost:8080/assessment.html#
答案 0 :(得分:2)
使用您在代码中提供的最少详细信息,我将尝试回答您的问题。
因此,如果要将从输入接收的值映射到某些模型数据,则需要使用 @ModelAttribute 批注进行。
@PostMapping("/greeting")
public String greetingSubmit(@ModelAttribute Greeting greeting) {
return "greeting";
}
因此添加如下内容:
return "greeting";
因此,以上代码将根据您的解析器配置查找/templates/greeting.html
。
如果使用spring安全性,则默认在spring-boot中启用CSRF过滤器。因此,您需要禁用它或在登录表单发布请求中添加csrf参数。 (推荐的)。对于其余表单,CSRF令牌将自动添加到具有隐藏输入的表单中。
要禁用CSRF:
在您的spring securityConfig中,对HttpSecurity对象禁用csrf保护,如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginProcessingUrl("/authentication")
.usernameParameter("j_username")
.passwordParameter("j_password").permitAll()
.and()
.csrf().disable()
}
或要在您的登录表单中添加csrf ,如下所示:
input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />