InternalResourceViewResolver неправильно разрешает представления - PullRequest
0 голосов
/ 08 ноября 2018

Понятия не имею, что мы здесь делаем неправильно. Я пытаюсь настроить одностраничный проект Spring MVC, чтобы я мог разобраться во всем. У меня один экран greeting.html, который я пытаюсь загрузить. Вот мой класс контроллера для его загрузки:

@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String getGreeeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);

        return "greeting";
    }

}

Это прекрасно работает, когда greeting.html в /resources/templates/greeeting.html. Тем не менее, я хотел бы, чтобы это было в папке WEB-INF. Я пытался поместить его в WEB-INF/views/greeting.html и webapp/WEB-INF/views/greeting.html. Затем я пытаюсь использовать InternalResourceViewResolver, как я прочитал в Интернете:

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".html");

    return viewResolver;
}

Насколько я понимаю, это должно позволить ему найти greeting.html за одной из моих настроек папки WEB-INF. Однако когда я перехожу на localhost:8080/greeting, я получаю 404 вместе со следующим сообщением в консоли:

WARN 1439 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/greeting.html]

Я в полной растерянности относительно того, что даже происходит или как это исправить, каждый онлайн-урок делает именно это и не имеет проблем, я не могу найти кого-либо онлайн с такой же проблемой. Любое руководство было бы здесь полезно.

Ответы [ 4 ]

0 голосов
/ 14 мая 2019

Попробуйте удалить при условии или добавить $ {tomcat-embed-jasper.scope} в теге области действия из зависимости tomcat-embed-jasper .Это помогло мне.

0 голосов
/ 09 ноября 2018

Попробуйте изменить расширитель представления, расширяющий WebMvcConfigurerAdapter.

@Configuration
@ComponentScan(basePackages="...package name...")
@EnableWebMvc

public class MvcConfiguration extends WebMvcConfigurerAdapter{

  @Bean
  public InternalResourceViewResolver viewResolver() {

     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
     viewResolver.setPrefix("/WEB-INF/views/");
     viewResolver.setSuffix(".html");

   return viewResolver;
}

}

0 голосов
/ 01 мая 2019

Я перепробовал все решения, но получил ошибку 404 при использовании Spring Boot 2. *. Для меня запуск приложения с помощью команды "mvn clean spring-boot:run" исправил ошибку

0 голосов
/ 09 ноября 2018

Привет, насколько я понимаю, из вашего вопроса вы используете весеннюю загрузку По умолчанию весенняя загрузка ищет папку src / main / resources / templates Если вы использовали некоторую зависимость, например:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency>

Это активирует тимелист по умолчанию.

Чтобы переопределить ваш ViewResolver вам нужно

При весенней загрузке вы можете сделать такой конфиг в вашем файле application.properties:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.html

или вы можете написать пользовательскую конфигурацию распознавателя с помощью конфигурации Java:

@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        registry.viewResolver(resolver);
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }  
 }

Я думаю, что это полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...