Хм. Я понимаю, что мне нужно добавить Book в контроллер, но, используя ваш код, IntelliJ предлагает мне сказать: «Не могу выполнить автоматическое подключение, бины типа« Book »не найдены» ». Я предполагаю, что главная проблема в том, что аннотация @Component, кажется, не создает Бин.
аюсь создать сайт SpringMVC с нуля, но я зашел в тупик.
Я использую автопроводку для создания экземпляра JdbcTemplate с источником данных, но каким-то образом я получаю исключение нулевого указателя. Буду признателен за вашу помощь с этим.
Мой AppConfig следующий:
@Configuration
@ComponentScan
public class AppConfig {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/onlinelibrary");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
/*Deleted this code, still doesn't work
@Bean
public Book Book() {
return new Book();
}
*/
}
Класс «Моя книга» выглядит следующим образом:
@Component
public class Book {
private JdbcTemplate jdbcTemplate;
private String title;
private String author;
private String isbn;
public Book() {
}
@Autowired
public Book(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public ModelMap getBooks() {
ModelMap model = new ModelMap();
String sql = "SELECT * FROM Books";
model.put("data", jdbcTemplate.queryForList(sql));
return model;
}
}
И это печально известное исключение NullPointer:
Любая помощь будет высоко ценится. Я, вероятно, забыл что-то сделать, но я не могу решить это сам, и я не могу найти ничего в StackOverflow, которое бы мне тоже помогло (хотя я уже прочитал много статей).
ОБНОВЛЕНИЕ С БОЛЕЕ ДАННЫМИ:
Моя структура проекта следующая:
И я использую объект Book в этом контроллере:
@Controller
public class BookController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getBookData(Book book, ModelMap model) {
model.put("data", book.getBooks());
return "BookView";
}
}