Настроить два контроллера

У меня два контроллера.

Я написал эти контроллеры и где мне нужно написать конфиг для правильной работы.

@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 "";
        }
    }

Вам не нужно писать конфигурацию. Вам просто нужна аннотация @Controller и сканирование компонентов в вашем dispatcher-servlet.xml. Проверьте, есть ли у вас этот <context:component-scan base-package = "path.to.your.controllers"/> в вашем xml.

amicoderozer 13.09.2018 17:25
1
1
85
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Что ж, думаю, достаточно будет добавить

<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?

user10332456 13.09.2018 18:38

@ Jackson750 нет. Где-то в вашем проекте должен быть размещен файл конфигурации, который является основным файлом конфигурации проекта. Я обновлю свой ответ, чтобы прояснить этот случай

Yuriy Tsarkov 13.09.2018 18:46

Хорошо буду ждать твоего ответа

user10332456 13.09.2018 18:49

Что должно быть внутри этого класса? Просто я раньше не видел эту конструкцию.

user10332456 13.09.2018 19:17

Там ничего не должно быть. Просто попробуйте создать его, как я показал ниже.

Yuriy Tsarkov 13.09.2018 19:22

Вы можете использовать такие сервисы 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";
        }

Тип сообщения отчета о состоянии / книги Описание Исходный сервер не нашел текущего представления для целевого ресурса или не желает раскрывать его существование.

user10332456 13.09.2018 19:25

404 Не нашел так ...?

user10332456 13.09.2018 19:26

Возврат метода контроллера («книга / список») - это путь к некоторому файлу .html, поэтому у вас должна быть эта «книга» как папка и «list.html» как файл. Все это должно быть внутри папки ресурсов.

Guilherme Alencar 13.09.2018 21:54

И я надеюсь, что вы используете механизм шаблонов (тимелеаф).

Guilherme Alencar 13.09.2018 21:57

Посмотрите этот ссылка изображение в начале вопроса, обратите внимание на иерархию

Guilherme Alencar 13.09.2018 22:16
Ответ принят как подходящий

Если вы используете конфигурацию на основе 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();
    }
}

Будет ли работать на двух контроллерах? Извините за глупый вопрос, но я действительно плохо разбираюсь в этой технологии.

user10332456 13.09.2018 19:38

Конечно. Вы можете объявлять контроллеры в одном пакете сколько угодно.

Seymur Asadov 13.09.2018 19:45

Другие вопросы по теме