2016-05-20 3 views
0

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

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

2016-05-20 02: 31: 20,877 ОШИБКА 6272 --- [НИО-8080-exec- 2] oaccC [. [. [/]. [DispatcherServlet]: Servlet.service() для сервлет [диспетчерServlet] в контексте с путём [] исключение [Обработка запроса не выполнена; вложенное исключение составляет java.lang.NullPointerException] с первопричиной

java.lang.NullPointerException: нуль на com.applesauce.service.CustomerService.addCustomer (CustomerService.java:24) ~ [/ классов: на]

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

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; 
} 
} 
+1

Разве это не ваше 'CustomerS ervice' должен быть Spring '@ Service'? Аннотируйте вместо этого и не создавайте его вручную, используйте '@ Autowired'. Кстати, вы должны удалить весь ненужный код из своего вопроса, который также включает в себя все прокомментированные строки. –

+0

Спасибо за подсказку.Я удалил часть кода. Можете ли вы объяснить «Аннотировать как это вместо этого и не создавать его вручную, используйте @Autowired». эта часть немного больше? Я не понимаю. –

ответ

1

Xtreme Байкер означает, что вы должны добавить @Service аннотация для вашего CustomerService, например:

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

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

private CustomerService customerService = new CustomerService(); 

к:

@Autowired 
private CustomerService customerService; 

Он должен решить NullPointerException.

+0

Спасибо, ребята, что решили! –

0

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

Repository.class

@Repository 
public interface {...} 

Service.class

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

Application.class

@Autowired Service service; 
service.method() //does not throws NullPointerException 

 Смежные вопросы

  • Нет связанных вопросов^_^