2017-03-18 88 views
0

我正在制作一个小应用程序,我可以使用spring-boot保存用户详细信息。我创建了实体及其相应的存储库。当我发出一个post请求来添加一个用户的用户对象在保存点到数据库时为空的id。这个id是在MySQL中自动生成的(自动递增)。从POST请求我得到3个字段是用户名,电子邮件,密码。用户类包含字段id,用户名,电子邮件,密码。我已添加注释SpringBoot JPA在发出请求时抛出异常

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id") 
private Integer id; 

为id字段。构造函数是

public User() { } 

public User(String username, String email, String password) { 
    this.username = username; 
    this.email = email; 
    this.password = password; 
} 

这是我得到的错误。 enter image description here

调试过程 enter image description here

我userService类

@Service 
    public class UserService implements UserServiceInterface { 

     @Autowired(required = true) 
     private UserRepository userrepository; 

     @Override 
     public User CreateNewUser(User user) { 
      return userrepository.save(user); 
     } 
} 

我UserController类

@RestController 
    public class UserController { 

     UserService us = new UserService(); 

     @RequestMapping(value ="/user",method = RequestMethod.POST) 
     public void RegisterUser(   
       @RequestParam(value="username") String username, 
       @RequestParam(value="email") String email, 
       @RequestParam(value="password") String password){ 
      us.CreateNewUser(new User(username,email,password)); 
     } 
} 

有什么理由我不能POST将数据保存到数据库?如何克服这一点?

+1

NPE在哪里?任何异常都应该使用其堆栈跟踪发布,因为它显示哪些代码是负责任的。很显然,一个对象可以传递到JPA API,而不需要设置任何'@ GeneratedValue'字段,并且它的值将被分配到数据存储区 –

+0

@NeilStockton我编辑了问题 – TRomesh

+0

@NeilStockton UserService是一个类,它可以完成用户的所有功能。例如保存用户信息,删除(基本CRUD) – TRomesh

回答

0

通过代码挖掘后,我发现了错误。通过创建一个UserService us = new UserService();的新实例,这不是由Spring管理的(Spring不知道它并且不能注入UserRepository - 这会导致NullPointerException)。在这个例子中,应该扩展UserService类而不是创建新的例程。