Debanik Dawn
Debanik Dawn

Reputation: 799

Cannot load view in spring boot

I have been trying for hours now, can't seem to fix this. I have a simple Spring Boot Application.

These are the important files:

DemoApplication.java

package com.whatever.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

import com.whatever.config.ConfigurationSettings;

@SpringBootApplication
@ComponentScan(basePackages = {"com.whatever.controllers", "com.whatever.config"})

public class DemoApplication{
    public static void main(String[] args) {
        Class[] sources = {DemoApplication.class, ConfigurationSettings.class};

        SpringApplication.run(sources, args);

        System.out.println("Hello WORLD!");
    }
}

MainController.java

package com.whatever.controllers;

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

@RestController
@RequestMapping("/")
public class MainController{

    @RequestMapping("/welcome")
    public ModelAndView welcome(){
        System.out.println("WELCOME!");

        ModelAndView mAndView = new ModelAndView();

        mAndView.setViewName("welcome");
        return mAndView;
    }
}

ConfigurationSettings.java

package com.whatever.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
public class ConfigurationSettings extends WebMvcConfigurationSupport{

    @Bean
    public InternalResourceViewResolver getResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

My project structure:

--src
   --main
      --com.whatever.config
      --com.whatever.controllers
      --com.whatever.demo
   --webapp
      --WEB-INF
         welcome.jsp

However, it can't load the welcome.jsp page and I keep on getting the /error page. I can't seem to understand the problem. Any help is appreciated.

P.S: I get the "Hello world!" and "WELCOME!" messages on the console. So, I know the control reaches there.

The StackTrace says:

2018-07-17 16:40:19.869 DEBUG 11004 --- [-auto-13-exec-9] o.s.w.servlet.view.BeanNameViewResolver  : No matching bean found for view name 'welcome'
2018-07-17 16:40:19.869 DEBUG 11004 --- [-auto-13-exec-9] o.s.b.f.s.DefaultListableBeanFactory     : Invoking afterPropertiesSet() on bean with name 'welcome'
2018-07-17 16:40:19.869 DEBUG 11004 --- [-auto-13-exec-9] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
2018-07-17 16:40:19.869 DEBUG 11004 --- [-auto-13-exec-9] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
2018-07-17 16:40:19.870 DEBUG 11004 --- [-auto-13-exec-9] o.s.web.servlet.DispatcherServlet        : Rendering view [org.springframework.web.servlet.view.JstlView: name 'welcome'; URL [/WEB-INF/welcome.jsp]] in DispatcherServlet with name 'dispatcherServlet'
2018-07-17 16:40:19.871 DEBUG 11004 --- [-auto-13-exec-9] o.s.web.servlet.view.JstlView            : Forwarding to resource [/WEB-INF/welcome.jsp] in InternalResourceView 'welcome'
2018-07-17 16:40:19.872 DEBUG 11004 --- [-auto-13-exec-9] o.s.web.servlet.DispatcherServlet        : Successfully completed request
2018-07-17 16:40:19.875 DEBUG 11004 --- [-auto-13-exec-9] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-07-17 16:40:19.875 DEBUG 11004 --- [-auto-13-exec-9] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Looking up handler method for path /error
2018-07-17 16:40:19.876 DEBUG 11004 --- [-auto-13-exec-9] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Did not find handler method for [/error]

Upvotes: 0

Views: 1124

Answers (2)

Rahul Rabhadiya
Rahul Rabhadiya

Reputation: 430

You have used @RestController , rather use @Controller , It will solve your problem

Please try as below ,

package com.whatever.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

import com.whatever.config.ConfigurationSettings;

@Controller
public class MainController{

    @RequestMapping("/welcome")
    public String welcome(){
        System.out.println("WELCOME!");
        return "welcome";
    }
}

Upvotes: 0

flyingfox
flyingfox

Reputation: 13506

You have add @RestController in your controller code,if you want to see the jsp page,you need to remove it and change to @Controller,since @RestController will add @ResponseBody to you controller method automatically

package com.whatever.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

import com.whatever.config.ConfigurationSettings;

@Controller("/")
public class MainController{

    @RequestMapping("/welcome")
    public ModelAndView welcome(){
        System.out.println("WELCOME!");

        ModelAndView mAndView = new ModelAndView();

        mAndView.setViewName("welcome");
        return mAndView;
    }
}

Upvotes: 1

Related Questions