【问题标题】:Spring Boot MongoRepository Null Pointer ExceptionSpring Boot MongoRepository 空指针异常
【发布时间】:2016-09-17 12:30:01
【问题描述】:

我对 spring 有点陌生,我遇到了空指针异常。 我相信 @Autowired 在我的 MongoRepository 上不起作用。 出于某种原因,当我尝试一些示例时,它正在工作。 (运行函数中注释掉的代码有效)

这是我得到的错误:

2016-05-20 02:31:20.877 错误 6272 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] :Servlet.service() for 带有路径 [] 的上下文中的 servlet [dispatcherServlet] 引发异常 [请求处理失败;嵌套异常是 java.lang.NullPointerException] 的根本原因

java.lang.NullPointerException: null at com.applesauce.service.CustomerService.addCustomer(CustomerService.java:24) ~[classes/: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;
}
}

【问题讨论】:

  • 你的 CustomerService 不是打算成为 Spring @Service 吗?改为注释而不是手动创建它,使用@Autowired。顺便说一句,您应该从问题中删除所有不相关的代码,其中还包括所有被注释的行。
  • 感谢您的提示。我删除了一些代码。你能解释一下“改为注释而不是手动创建它,使用@Autowired。”这部分多一点?我不明白。

标签: java spring mongodb repository mongorepository


【解决方案1】:

Xtreme Biker 的意思是,您应该为您的 CustomerService 添加 @Service 注释,如下所示:

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

此外,如果您希望 Spring 处理它,您永远不想使用 new 运算符创建服务。在您的 CustomerController 中,更改初始化行:

private CustomerService customerService = new CustomerService();

到:

@Autowired
private CustomerService customerService;

它必须解决 NullPointerException。

【讨论】:

    【解决方案2】:

    我有同样的问题,我用这种方式解决了(解释是通用的)

    Repository.class

    @Repository
    public interface {...}
    

    服务类

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

    应用程序类

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

    【讨论】:

      【解决方案3】:

      检查您是否已经创建了一个具有@Service 注释的类的对象(使用新的)。这个类也应该是自动装配的,你已经自动装配了你的存储库 bean。

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 2021-06-15
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2017-11-20
        • 2019-07-08
        • 1970-01-01
        相关资源
        最近更新 更多