我一直试图引用Spring的指南(对于没有经验的我来说,完全完成这个特定的任务对我来说太有用了)来创建一个简单的玩具示例:处理表单提交为POST请求并显示结果。
更新:ViewConfiguration
已添加课程 - 请参阅问题的底部以获取更多信息。
这是我的项目结构:
src
| main
| | java
| | | controllers
| | | | BasicController.java
| | | | RestfulController.java
| | | Application.java
| | | ViewConfiguration.java
| | resources
| | | static
| | | | form.html
我的代码如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Controller
public class BasicController {
@RequestMapping("/")
public String greeting() {
return "form";
}
}
@RestController
public class RestfulController {
@RequestMapping(value="/result", method=RequestMethod.POST)
public String parseForm(@RequestParam String name) {
return name;
}
}
@Configuration
public class ViewConfiguration extends WebMvcConfigurerAdapter {
@Bean
public UrlBasedViewResolver urlBasedViewResolver() {
UrlBasedViewResolver resolver = new urlBasedViewResolver();
resolver.setPrefix("/static");
resolver.setSuffix(".html");
resolver.setCache(false);
return resolver;
}
}
form.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form</title>
</head>
<body>
<form action="result" method="post">
Name: <input type="text" name="name">
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
当我在Eclipse中作为Java应用程序运行上述内容时,URL http://localhost:8080/
仅产生HTTP 404 Not Found
错误。我已尝试greeting()
的所有以下返回值,但未成功:
我有一个预先存在的应用程序,在我提交硬编码的URL时正确处理GET请求。但是,我需要使用POST。据我所知,这不能通过硬编码的URL进行测试 - 必须通过表单提交来完成。到目前为止,我无法复制早期GET版本的成功。
更新:根据以下答案中的建议,我添加了一个视图解析器,但我没有使用像Thyme这样的第三方,而是创建了一个基本的自定义解析器,如上所示。
目前,我已收到IllegalArgumentException: Property 'viewClass' is required
我可以找到的所有在线教程都使用resolver.setViewClass(JstlView.class);
,但由于我的所有观看次数都是静态.html
页面,因此我不确定是否应该使用JstlView
。从上面也可以清楚地看出,我也不能把它留空。
我应该将viewClass
设置为什么?我的代码目前还有其他错误吗?最终,我该如何让它发挥作用?
答案 0 :(得分:0)
由于您尚未指定任何其他ViewResolver
,因此无法检查/src/resources/...
中的观看次数。
为此,您应指定ViewResolver
,或让Spring Boot
进行注册。为此,您只需将Spring Boot Starter Thymeleaf
包含在项目中即可。此启动器具有ViewResolver
定义,用于检查资源目录中的视图。
还尝试在/ resources / templates / dir中添加视图。
答案 1 :(得分:0)
最后发现主要问题是由于我的项目类路径(在Eclipse中设置为/src/
)与大多数在线教程(/src/main/
)中使用的不同。所以最终结果如下:
src
| main
| | java
| | | controllers
| | | | BasicController.java
| | | | RestfulController.java
| | | Application.java
| META-INF
| | resources
| | | form.html
@Controller
public class BasicController {
@RequestMapping("/")
public String greeting() {
return "form.html";
}
}
@RestController
public class RestfulController {
@PostMapping("/result")
public String parseForm(@RequestParam String name) {
return name;
}
}
ViewConfiguration
类是不必要的,因此被移除。