Хотя вы определили компонент jdbcUserDAO
, вы не связали его с классом UserController
. Это вызывает NullPointerException
, потому что поле jdbcUserDAO
равно null
, что приводит к исключению при вызове jdbcUserDAO.getAllUsers()
. Чтобы решить эту проблему, аннотируйте установщик jdbcUserDAO
в UserController
с помощью @Autowired
, например:
@RestController
public class UserController {
private JdbcUserDAO jdbcUserDAO;
public JdbcUserDAO getJdbcUserDAO() {
return jdbcUserDAO;
}
@Autowired
public void setJdbcUserDAO(JdbcUserDAO jdbcUserDAO) {
this.jdbcUserDAO = jdbcUserDAO;
}
@RequestMapping("/")
@ResponseBody
public String welcome() {
return "Welcome to RestTemplate Example.";
}
@RequestMapping(value="/users", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<User> getAllUsers() {
System.out.println("jdbcUserDAO"+jdbcUserDAO);
List<User> userList = jdbcUserDAO.getAllUsers();
System.out.println(userList);
return userList;
}
}
Аннотация @Autowired
сообщает Spring, что bean-компонент, соответствующий интерфейсу параметра для установщика (в данном случае JdbcUserDAO
), должен быть введен в установщик, что приводит к установке поля jdbcUserDAO
в значение ваш компонент JdbcUserDAO
определен в application_config.xml
.
Вы также можете упростить UserController
и аннотировать поле (удаляя геттер и сеттер):
@RestController
public class UserController {
@Autowired
private JdbcUserDAO jdbcUserDAO;
@RequestMapping("/")
@ResponseBody
public String welcome() {
return "Welcome to RestTemplate Example.";
}
@RequestMapping(value="/users", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<User> getAllUsers() {
System.out.println("jdbcUserDAO"+jdbcUserDAO);
List<User> userList = jdbcUserDAO.getAllUsers();
System.out.println(userList);
return userList;
}
}
Для получения дополнительной информации см. Руководство по Spring @ Autowired .
Также похоже, что ваш application_config.xml
не включен в контекст приложения Spring. Чтобы включить этот XML-файл, измените класс ApplicationConfiguration
на следующий:
@ComponentScan(basePackages = {"com.ganeshTrading.riceAppService"})
@Configuration
@EnableWebMvc
@ImportResource("classpath:/path/to/application_config.xml")
public class ApplicationConfiguration {
}
Обратите внимание, что classpath:/path/to/application_config.xml
является примером, и вместо него следует использовать фактическое местоположение вашего application_config.xml
файла.