【问题标题】:Java Spring Web application NullpointerJava Spring Web 应用程序空指针
【发布时间】:2017-12-15 23:14:13
【问题描述】:

我目前正在尝试使用 Spring 引导和 Spring 数据创建我的第一个 Java Web 应用程序。 我已经写了一个控制器,现在尝试在内存数据库中创建数据。

尝试创建新用户时出现空指针异常。尽管用户设置了每个值。

POJO:

package db;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;

private String userName;

private String email;

private String password;

protected User() {}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

道:

package db;

import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, Long> {

    List<User> findByUserName(String userName);
}

服务:

package db;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class UserService {

    @Autowired
    UserRepository repository;

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public User start() {
        User user = new User();
        user.setEmail("alovela@uk.com");
        user.setUserName("Ada");
        user.setPassword("Password");

        repository.save(user);

        return user;
    }
}

调用 UserService.start() 时出错;在我的主要:

2017-07-11 20:31:10.027 ERROR 7604 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null

【问题讨论】:

  • 添加@Autowired到UserRepository仓库;
  • 为什么你的User*Service* 包含一个User*Repository* 带有@Repository 注释?

标签: java database spring spring-boot spring-data


【解决方案1】:

看起来 NPE 是在线提​​出的
repository.save(user);

依赖repository 没有注入到UserService,用@Resource@Autowired 注释它。

【讨论】:

  • 您好,谢谢您的回答。我都试过了,但我仍然有同样的错误信息。是的,确实是那行中的错误。
【解决方案2】:

1.将@Repository添加到UserRepository,以便被Spring的组件扫描功能拾取

 @Repository
    public interface UserRepository extends CrudRepository<User, Long> {

        List<User> findByUserName(String userName);
    }

2.UserService中的Autowire仓库

@Autowired
UserRepository repository;`

附:没必要,但是建议把UserService类中的@Repository改成@Service,这样更能体现这个类的目的,而且Spring也能映射特定的异常。

@Repository
public class UserService {

【讨论】:

  • 您好,感谢您的留言。我添加了您建议的注释。不幸的是,仍然有同样的错误。我还需要 Spring 数据的配置文件吗?如果是的话,我在哪里可以找到一个例子。
  • 你正在为哪个对象获得 NPE?
  • 行内:repository.save(user);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多