java - Spring 404运行教程

标签 java eclipse spring maven spring-mvc

我正在学习 Spring 教程:http://spring.io/guides/gs/validating-form-input/ ,并在尝试访问 localhost root 时收到 404。

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Aug 06 02:36:15 CDT 2014
There was an unexpected error (type=Not Found, status=404).

我稍微修改了工作流程以使用 Eclipse 的 Maven 项目设置。我采取的步骤与教程不同,按顺序排列:

  1. 在 Eclipse 中创建 Maven 项目
  2. 将生成的 pom.xml 替换为教程中的 pom.xml
  3. 教程指示将模板 HTML 文件放在 resources/templates 中,Spring 抛出了这个异常(实际上是相当多的内部异常),由: java.lang.IllegalStateException 引起:找不到模板位置:类路径资源[templates/](请添加一些模板或检查您的Thymeleaf配置)
  4. 为了解决这个问题,我将模板 form.htmlresults.html 移至类路径上的 /templates

我用调试器检查了 WebController 类,并且没有任何代码被命中。我不认为这是本地配置问题,因为 git 存储库中已完成的教程的行为符合预期。

如果有人有任何见解,我们将不胜感激。谢谢你!


这些是我的非工作尝试中的文件。

WebController.java

package hello;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

public class WebController extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) { 
        registry.addViewController("/results").setViewName("results"); 
    }

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String showForm(Person person) { 
        return "form"; 
    }

    @RequestMapping(value="/", method=RequestMethod.POST)
    public String checkPersonInfo(@Valid Person person, BindingResult bindingResult) { 
        if (bindingResult.hasErrors()) { 
            return "form"; 
        }
        return "redirect:/results"; 
    }
}

Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) throws Exception { 
        SpringApplication.run(Application.class, args); 
    }
}

Person.java

package hello;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Person {
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Person [name=")
            .append(name)
            .append(", age=")
            .append(age)
            .append("]");
        return builder.toString();
    }

    @Size(min=2, max=30)
    private String name; 

    @NotNull
    @Min(18)
    private Integer age; 

    public String getName() { 
        return this.name; 
    }

    public void setName(String name) { 
        this.name = name; 
    }

    public Integer getAge() { 
        return age; 
    }

    public void setAge(Integer age) { 
        this.age = age; 
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-validating-form-input</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.4.RELEASE</version>
    </parent>

    <properties>
        <!-- use UTF-8 for everything -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <start-class>hello.Application</start-class>
     </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>http://repo.spring.io/libs-release</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>http://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

最佳答案

您的 Controller 上没有@Controller。就Spring而言,这个类只是一个它不应该关心的简单的pojo:它没有在任何地方定义,也没有被类路径扫描拾取,因为它没有正确的注释。

关于java - Spring 404运行教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25155222/

相关文章:

java - 仅更新 hibernate 中对象的非空字段

eclipse - Spring JBoss Eclipse 中的周转时间

Spring JdbcTemplate batchUpdate处理异常

java - 减法返回错误答案

java - Leanback 库 - PlaybackSupportFragment - 如何隐藏辅助操作

android - 文件名无效 : must contain only [a-z0-9]

c++ - Eclipse C++多个项目通用文件

java - Spring MVC非阻塞和阻塞的性能差异

fonts - 如何在 Java Web 应用程序中嵌入字体?

java - IntelliJ 外部 maven 库可以告诉依赖项来自哪里吗?