Java Spring Web 应用程序空指针
Posted
技术标签:
【中文标题】Java Spring Web 应用程序空指针【英文标题】:Java Spring Web application Nullpointer 【发布时间】: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
注释?
【参考方案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);以上是关于Java Spring Web 应用程序空指针的主要内容,如果未能解决你的问题,请参考以下文章
spring namedParameterJdbcTemplate 空指针报错
使用 Spring MVC 运行 Spring Boot 时引发空指针异常
Spring Boot 1.5.9和嵌入式jetty服务器在运行时抛出空指针异常?