【问题标题】:need help to fix spring boot project需要帮助来修复 Spring Boot 项目
【发布时间】:2019-02-11 04:03:49
【问题描述】:

我正在尝试添加新名称、姓氏和电子邮件。单击保存按钮后,我收到一条错误消息“字段 'id' 上的对象 'employee' 中的字段错误” 我该如何解决这个错误。我正在使用带有 thymeleaf 和 jquery 的 spring boot。

项目链接为:Here

谢谢

【问题讨论】:

    标签: jquery spring-boot thymeleaf


    【解决方案1】:

    将您的列 ID 声明为 Integer 并且不要从 UI 传递它或将值传递为空对象。如果你想保持它 int 然后总是从 UI 传递 0 。传递空字符串总是会引发异常,直到您没有自己的 messageConverter 处理。

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

    【讨论】:

    • 我把 int 改成 Integer 但还是一样的错误
    • 更改后,您需要确保您的 UI(api 调用者)不能在您的请求 json 中发送该键,或者必须发送空对象作为键的值。
    • 当我将 input type="hidden" 更改为 input type="text" 并在“id”文本字段中输入一个数字时,项目正在运行,但我不想显示 id表单中的字段,mysql中的id字段是自增的。
    • 如果你使用 input type="hidden" 然后传递任何默认值,比如 0。如果你不传递值,那么默认情况下它将作为空字符串。值 0 不会影响您自动生成的 id,但有助于正确映射。例如:
    【解决方案2】:

    您需要在控制器上将名为 id 的参数更改为 Integer 而不是 int。原始 int 变量不能为空。

    【讨论】:

    • 我改了,还是一样的问题
    【解决方案3】:

    发生错误是因为员工实体的“id”字段为空白/空字符串。根据 Employee.java 中的“id”定义,它应该是一个整数值。在保存之前,您需要将一些整数值传递给员工对象的这个“id”字段。使用以下技术让应用程序使用数据库序列。

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_generator")
    @SequenceGenerator(name="seq_generator", sequenceName = "my_seq", allocationSize=50)
    @Column(name = "id", updatable = false, nullable = false)
    private int id;
    

    【讨论】:

    • @NinoosAlKatoni 您是否将任何值传递给此变量?我看到您在表单中将其声明为隐藏参数,而没有为其分配任何值。然后将其传递到服务器端以保存在数据库中,这就是它给出此错误的地方。您需要确保通过在代码中传递或设置某些内容或在数据库中定义序列并在实体类中添加相关注释来为字段“id”分配一些值,以便自动为“id”值取自数据库序列。
    • 当我将 input type="hidden" 更改为 input type="text" 并在“id”文本字段中输入一个数字时,项目正在运行,但我不想显示 id表单中的字段,mysql中的id字段是自增的。
    • 在这种情况下,您无需在表单中的任何位置声明。只需传递其余字段并确保您已使用相关注释修饰了 Entity 类中的“id”字段。我已经更新了我的答案以显示这一点。
    • 同样的错误,“编辑”按钮工作但“新建”按钮不工作,虽然“编辑”和“新建”按钮是相同的,“编辑”按钮检索数据,当我点击save 数据已保存但“新建”按钮不检索数据,您可以检查项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多