我想创建一个将用户数据(名称和密码)存储到数据库中的简单应用程序。为此,我创建了EC2和RDS实例。我在EC2上运行Spring Boot应用程序,它与RDS对话。我的User类看起来像这样:
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id;
@Column(name="name")
private String name;
@Column(name="password")
private String password;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
我希望能够在EC2 localhost上发出GET和POST请求,所以我添加了必要的存储库类:
@RepositoryRestResource(collectionResourceRel = "usertest", path = "usertest")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}
现在,我应该可以在我的SQL数据库中添加一个条目,如下所示:
curl -H "Content-Type: application/json" -X POST -d '{"id": "102", username":"john", "password":"xyz"}' http://localhost:8080/usertest
但是,我收到以下错误消息:
{"timestamp":1482172780645,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet","path":"/usertest"}
如果删除“id”json字段,我会得到相同的消息(因为它应该自动递增)。
我有一个AppConfig类,其中包含我的RDS实例和标准主类的配置详细信息:
@SpringBootApplication
@EnableJpaRepositories
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
我还附加了EC2实例所需的安全组,以便与RDS实例“对话”。任何想法为什么我不能做这个简单的POST?感谢任何帮助。
答案 0 :(得分:0)
错误信息很奇怪,我期待像
这样的东西Unexpected character
问题是肯定在你的卷曲中,在你的消息中你缺少用户名之前的双引号。正确的是:
curl -H "Content-Type: application/json" -X POST -d '{"id": "102", "username":"john", "password":"xyz"}' http://localhost:8080/usertest
我猜你正在ec2实例中执行curl命令,因为你使用的是localhost:8080。您确定可以访问正确的数据库吗?您的项目是否适用于您的本地环境(可能使用h2database)?
还有一件事:作为第一步,您应该检查(并在发布时)堆栈跟踪,REST响应中的消息是不够的。