Java 来自其他软件包的Api给出错误“;调用save()之前,必须手动分配此类的ID;

Java 来自其他软件包的Api给出错误“;调用save()之前,必须手动分配此类的ID;,java,spring,spring-boot,rest,Java,Spring,Spring Boot,Rest,我正在为我的最后一年项目构建一个SpringBoot后端产品包中的API工作正常。但是当我调用addUser Api时,它位于Users包中我得到了这个{“在调用save()”}错误之前,必须手动分配这个类的ID。我得到了错误代码500的响应 我曾尝试在应用程序根目录和许多其他解决方案中实现componentscan注释。但对我来说什么都不管用 目前为止我尝试的解决方案 您没有共享API请求,我猜您没有为用户类传递正确的参数。该类也没有ID生成策略,再加上不正确的请求主体,将导致上述错误

我正在为我的最后一年项目构建一个SpringBoot后端产品包中的API工作正常。但是当我调用addUser Api时,它位于Users包中我得到了这个{“在调用save()”}错误之前,必须手动分配这个类的ID。我得到了错误代码500的响应

我曾尝试在应用程序根目录和许多其他解决方案中实现componentscan注释。但对我来说什么都不管用

目前为止我尝试的解决方案

您没有共享API请求,我猜您没有为用户类传递正确的参数。该类也没有ID生成策略,再加上不正确的请求主体,将导致上述错误

编辑:您的
UserRepository扩展了crudepository
定义了一个具有整数主键的存储库,但是该实体有一个字符串id字段,您可能还需要更正该字段。

问题出在这里

@Entity 
public class User {
    @Id
    String user_Id;

  }
您已将user_Id声明为表的主键。因此,它不能为null。我确信在您的控制器中,您在不提供密钥的情况下传递对象用户。在许多情况下,我们离开数据库来创建主键,但在您的情况下,它不是这样工作的。因此,在调用
.save()

这就是您得到错误的原因

 {" ids for this class must be manually assigned before calling save()"}
如果您希望从JPA或数据库中自动获取密钥的值,则必须提供另一个说明@GeneratedValue并选择一个选项。 但要使其工作,您必须将id字段从字符串更改为长或整数

这是一个如何工作的例子

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

  }

世代类型。有许多其他选项。

我在响应正文中传递{user\u id:“myuserid”}@Creator该字段是
user\u id
,带有大写字母
I
,我已经完成了您建议的所有更改。但仍然不起作用尝试调用API为:
{user\u Id:“myuserid”}
我正在按照您的建议调用API。但仍然是相同的错误。问题在于API调用。我以{“user_Id”:“MyID”}的形式传递数据,而我必须像这样发送“MyID”