在Spring Boot中访问静态HTML时找不到404 404

时间:2017-02-06 09:20:58

标签: spring spring-boot http-post http-status-code-404

我一直试图引用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()的所有以下返回值,但未成功:

  • 形式
  • form.html
  • /形式
  • /form.html
  • /静态/形式
  • /static/form.html
  • /资源/静态/形式
  • /resources/static/form.html

我有一个预先存在的应用程序,在我提交硬编码的URL时正确处理GET请求。但是,我需要使用POST。据我所知,这不能通过硬编码的URL进行测试 - 必须通过表单提交来完成。到目前为止,我无法复制早期GET版本的成功。

更新:根据以下答案中的建议,我添加了一个视图解析器,但我没有使用像Thyme这样的第三方,而是创建了一个基本的自定义解析器,如上所示。

目前,我已收到IllegalArgumentException: Property 'viewClass' is required

我可以找到的所有在线教程都使用resolver.setViewClass(JstlView.class);,但由于我的所有观看次数都是静态.html页面,因此我不确定是否应该使用JstlView。从上面也可以清楚地看出,我也不能把它留空。

我应该将viewClass设置为什么?我的代码目前还有其他错误吗?最终,我该如何让它发挥作用?

2 个答案:

答案 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类是不必要的,因此被移除。