【问题标题】:Spring MongoRepository is NullSpring MongoRepository 为空
【发布时间】:2014-10-11 05:45:29
【问题描述】:

我有以下代码尝试使用 Spring Mongo Repository 将 POJO 对象(Actor)保存到 MongoDB 中,但存储库对象始终为 Null。我关注了多个示例,但主要是this one

POJO 类:

@Document(collection = "actors")
public class Actor 
{
  @Id
  private String id;
  ...
  //constructor
  //setters & getters
}

存储库:

public interface ActorRepository extends MongoRepository<Actor, String> 
{
  public Actor findByFNameAndLName(String fName, String lName);
  public Actor findByFName (String fName);
  public Actor findByLName(String lName);
}

使用存储库的服务:

@Service
public class ActorService 
{
  @Autowired
  private ActorRepository actorRepository;

  public Actor insert(Actor a)
  {
    a.setId(null);
    return actorRepository.save(a);
  }
} 

我从 REST 控制器类访问服务:

@RestController
public class Controllers 
{

  private static final Logger logger = Logger.getLogger(Controllers.class);
  private static final ApplicationContext ctx = new  AnnotationConfigApplicationContext(SpringMongoConfig.class);

  private ActorService actorService = new ActorService();

  @RequestMapping(value="/createActor", method=RequestMethod.POST)
  public @ResponseBody String createActor(@RequestParam(value = "fName") String fName,
        @RequestParam(value = "lName") String lName,
        @RequestParam(value = "role") String role)
  {
    return actorService.insert(new Actor(null,fName,lName,role)).toString();

  }

 ...
}

我从这一行得到的错误是 NullPointerException:return actorRepository.save(a); in the ActorService.insert() 方法。

知道为什么会这样吗?

编辑:这是 Spring 配置

@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration
{ 
    @Bean
    public GridFsTemplate gridFsTemplate() throws Exception 
    {
        return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
    }

    @Override
    protected String getDatabaseName() 
    {
        return "SEaaS";
    }

    @Override
    @Bean
    public Mongo mongo() throws Exception 
    {
        return new MongoClient("localhost" , 27017 );
    }

    public @Bean MongoTemplate mongoTemplate() throws Exception 
    {
        return new MongoTemplate(mongo(), getDatabaseName());
    }    
}

【问题讨论】:

    标签: spring spring-data-mongodb


    【解决方案1】:

    问题是您没有使用 Spring 来获取 ActorService 依赖项 - 而是使用

    手动实例化了依赖项

    private ActorService actorService = new ActorService();.

    以下代码是将ActorService 依赖项注入控制器的最简单修复方法。

    @RestController
    public class Controllers 
    {
    
      private static final Logger logger = Logger.getLogger(Controllers.class);
      private static final ApplicationContext ctx = new  AnnotationConfigApplicationContext(SpringMongoConfig.class);
    
      @Autowired 
      private ActorService actorService;
    
      @RequestMapping(value="/createActor", method=RequestMethod.POST)
      public @ResponseBody String createActor(@RequestParam(value = "fName") String fName,
            @RequestParam(value = "lName") String lName,
            @RequestParam(value = "role") String role)
      {
        return actorService.insert(new Actor(null,fName,lName,role)).toString();
    
      }
    
     ...
    }
    

    【讨论】:

    • @Sam 太好了!很高兴听到它!
    • @Sam 如果您接受答案,这将对未来的读者有所帮助,因为他们不必阅读 cmets 就知道它是正确的。谢谢!
    • 完成!我不能立即这样做,因为它不允许我:)
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2019-05-11
    • 2020-11-29
    • 2018-06-22
    相关资源
    最近更新 更多