У меня два контроллера.
Я написал эти контроллеры и где мне нужно написать конфиг для правильной работы.
@Controller
public class BookController {
private BookService bookService;
@Autowired(required = true)
@Qualifier(value = "bookService")
public void setBookService(BookService bookService) {
this.bookService = bookService;
}
@RequestMapping(value = "books", method = RequestMethod.GET)
public String listBooks(Model model){
model.addAttribute("book", new Book());
model.addAttribute("listBooks", this.bookService.listBooks());
return "books";
}
}
@Controller("controller1")
public class AuthorController {
private AuthorService authorService;
@Autowired(required = true)
@Qualifier(value = "authorService")
public void setBookService(AuthorService authorService) {
this.authorService = authorService;
}
@RequestMapping
(value = "authors", method = RequestMethod.GET)
public String listAuthors(Model model){
model.addAttribute("author", new Author());
model.addAttribute("listAuthors", this.authorService.list());
return "";
}
}
Что ж, думаю, достаточно будет добавить
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
в pom.xml
и добавьте аннотацию @EnableWebMvc
в свой файл AppConfig
UPD
Допустим у вас есть приложение com.foo.app.AppName
Затем, чтобы решить проблему, вы должны создать класс com.foo.app.AppName.AppConfig
и добавить хотя бы это:
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
}
Реализация WebMvcConfigurerAdapter
не является железным правилом - вы можете использовать любые конфигураторы в зависимости от ваших потребностей.
Я просто должен заменить @Controller на @EnableWebMvc?
@ Jackson750 нет. Где-то в вашем проекте должен быть размещен файл конфигурации, который является основным файлом конфигурации проекта. Я обновлю свой ответ, чтобы прояснить этот случай
Хорошо буду ждать твоего ответа
Что должно быть внутри этого класса? Просто я раньше не видел эту конструкцию.
Там ничего не должно быть. Просто попробуйте создать его, как я показал ниже.
Вы можете использовать такие сервисы autowire:
@Controller
@RequestMapping("book")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("find_all")
public String list(Model model) {
model.addAttribute("book", bookService.findAll());
return "book/list";
}
Тип сообщения отчета о состоянии / книги Описание Исходный сервер не нашел текущего представления для целевого ресурса или не желает раскрывать его существование.
404 Не нашел так ...?
Возврат метода контроллера («книга / список») - это путь к некоторому файлу .html, поэтому у вас должна быть эта «книга» как папка и «list.html» как файл. Все это должно быть внутри папки ресурсов.
И я надеюсь, что вы используете механизм шаблонов (тимелеаф).
Посмотрите этот ссылка изображение в начале вопроса, обратите внимание на иерархию
Если вы используете конфигурацию на основе Xml, попробуйте добавить эту конфигурацию в свой dispatcherServlet.xml
<context:component-scan base-package = "com.example.controllers"/>
и если вы используете конфигурацию на основе Java, добавьте этот код в свой класс конфигурации реализации WebMvcConfigurerAdapter
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controllers")
Пример:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controllers")
public class SpringConfig extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Будет ли работать на двух контроллерах? Извините за глупый вопрос, но я действительно плохо разбираюсь в этой технологии.
Конечно. Вы можете объявлять контроллеры в одном пакете сколько угодно.
Вам не нужно писать конфигурацию. Вам просто нужна аннотация
@Controller
и сканирование компонентов в вашемdispatcher-servlet.xml
. Проверьте, есть ли у вас этот<context:component-scan base-package = "path.to.your.controllers"/>
в вашем xml.