Исключение нулевого указателя Spring Boot MongoRepository

Я немного новичок в Spring, и я столкнулся с исключением нулевого указателя. Я считаю, что @Autowired не работает в моем MongoRepository. По какой-то причине, когда я попробовал несколько примеров, это сработало. (Закомментированный код в функции запуска работал)

Это ошибка, которую я получаю:

2016-05-20 02: 31: 20.877 ОШИБКА 6272 --- [nio-8080-exec-2] oaccC [. [. [/]. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с path [] сгенерировал исключение [Ошибка обработки запроса; вложенное исключение - java.lang.NullPointerException] с основной причиной

java.lang.NullPointerException: null в com.applesauce.service.CustomerService.addCustomer (CustomerService.java:24) ~ [классы /: na]

Вы можете взглянуть и направить меня? Кроме того, пожалуйста, дайте мне знать, если я делаю что-то не так, в соответствии с лучшими практиками. Если вам нужна дополнительная информация, спрашивайте!

com.applesauce.controller

@RestController 
@RequestMapping("/customer")
public class CustomerController {

private CustomerService customerService = new CustomerService();

@RequestMapping(value = "/addcustomer", method = RequestMethod.GET)
public Customer addCustomer(@RequestParam("firstName") String fName,
                         @RequestParam("lastName") String lName,
                         @RequestParam("email") String email,
                         @RequestParam("phoneNumber") String phoneNumber,
                         @RequestParam("source") String source){
    return customerService.addCustomer(new Customer(fName,lName,email,phoneNumber,source));
}
}

com.applesauce.repository

@Repository
public interface CustomerRepository extends MongoRepository<Customer, String> {

public Customer findByFirstName(String firstName);
public List<Customer> findByLastName(String lastName);
}

com.applesauce.service

@EnableMongoRepositories(basePackages = "com.applesauce.repository")
public class CustomerService {

@Autowired
private CustomerRepository repository;

public Customer addCustomer(Customer customer){

    repository.save(customer);

    return customer;
}
}

person Jackson Chang    schedule 20.05.2016    source источник
comment
Разве ваш CustomerService не предназначен быть Spring @Service? Вместо этого добавьте аннотации и не создавайте вручную, используйте @Autowired. Кстати, вы должны удалить из своего вопроса весь посторонний код, который также включает все комментируемые строки.   -  person Xtreme Biker    schedule 20.05.2016
comment
Спасибо за совет. Я удалил часть кода. Можете ли вы объяснить, как это сделать, и не создавайте его вручную, используйте @Autowired. эта часть еще немного? Я не понимаю.   -  person Jackson Chang    schedule 20.05.2016


Ответы (3)


Xtreme Biker означал, что вы должны добавить аннотацию @Service для своей службы CustomerService, например:

@EnableMongoRepositories(basePackages = "com.applesauce.repository")
@Service
public class CustomerService {
...
}

Кроме того, вы никогда не захотите создавать сервис с использованием оператора new, если ожидаете, что Spring позаботится об этом. В вашем CustomerController измените строку инициализации:

private CustomerService customerService = new CustomerService();

to:

@Autowired
private CustomerService customerService;

Он должен устранить исключение NullPointerException.

person dmytro    schedule 22.05.2016

Убедитесь, что вы создали объект класса с аннотацией @Service (используя new). Этот класс также должен быть автоматически подключен вместо этого, когда вы автоматически подключили свой bean-компонент репозитория.

person ankit shukla    schedule 05.08.2019

У меня была такая же проблема, и я решил таким образом (объяснение общее)

Repository.class

@Repository
public interface {...}

Service.class

public class {...}
@Autowired 
private Repository repo;

Application.class

@Autowired Service service;
service.method() //does not throws NullPointerException
person jmojico    schedule 30.08.2017