Spring引导不显示第一个视图

时间:2017-04-16 21:09:11

标签: java spring spring-boot

我正在构建一个spring boot应用程序。我的问题是,当我运行项目时,我的登录页面没有显示。这是我的代码:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RestLogin {

    @RequestMapping("/")
    public String login() {
        return "login";
    }
}

我只获得一个白页和"登录"写在里面。当我尝试使用@RestController更改@Controller时,我得到GET http://localhost:8080/ 404 ()。我的login.html页面位于webapp> tpl> login.html

如何显示登录页面?

修改

这是我的应用程序类

@SpringBootApplication
public class ExampleApplication extends SpringBootServletInitializer {

    private static Logger logger = LoggerFactory.getLogger(ExampleApplication.class);

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(ExampleApplication.class);
    }

    public static void main(String[] args) {

        SpringApplication.run(ExampleApplication.class, args);
    }
}

4 个答案:

答案 0 :(得分:2)

我不知道你的配置,但是:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().and().authorizeRequests()
                                         .antMatchers("/**").permitAll();
        http.authorizeRequests().antMatchers("/**").permitAll();
    }
}

在Application.properties文件中添加:

spring.mvc.view.suffix: .html

将RestLogin类的@RestController更改为@Controller。还将您的html文件放在资源文件夹内的静态文件夹中。

答案 1 :(得分:0)

您需要一个带有main方法的应用程序类。请参阅this tutorial

这是一个片段:

package hello;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {

            System.out.println("Let's inspect the beans provided by Spring Boot:");

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        };
    }

}

答案 2 :(得分:0)

这是正常行为。

新版本的Spring网站附带@RestController注释,除了@Controller + @ResponseBody之外什么都没有。因此,当您在方法中使用return语句时,必须使用@RestController或使用@ResponseBody注释您的方法。

这里的问题是Spring对http方法类型了解不多,请你尝试使用@GetMapping("/")同时组合路径和方法。

答案 3 :(得分:0)

根据您发布的代码和说明,您会收到预期的行为。

当您使用@RestController注释控制器时,这意味着该控制器上的方法将尝试将其结果作为JSON返回。

根据你的代码:

@RestController
public class RestLogin {

    @RequestMapping("/")
    public String login() {
        return "login";
    }
}

你正在返回字符串“登录”,这就是为什么你得到空白页,其中登录一词为JSON

如果您将@RestController更改为@Controller,那么它将不再将您的字符串作为JSON返回,

但是Spring会尝试从“login”字符串中找出一个视图,为此您需要在项目中添加一个视图解析器bean。