【问题标题】:HTML form submit not working with Spring Boot 2.3.1HTML 表单提交不适用于 Spring Boot 2.3.1
【发布时间】:2020-10-10 07:44:21
【问题描述】:

从 Spring Boot 2.2.7 切换到 Spring Boot 2.3.1 后,针对我的特定情况提交表单时的实体转换不再起作用

Category.java

@Entity @Getter @Setter
public class Category implements Serializable {
    private Integer id;
    private String name;
}

SearchForm.java:

@Getter @Setter
public class SearchForm implements Serializable {
    private String q;
    private Category c;
}

HTML 表单:

<form method="get" th:action="@{/}" th:object="${searchForm}">
    <input th:field="*{q}" type="text" />
    <select th:field="*{c}">
        <option th:each="cat : ${categories}" th:value="${cat.id}"  th:text="${cat.name}" />
    </select>
</form>

Controller.java:

@PostMapping
public String post( @ModelAttribute final SearchForm searchForm ) {
    // ...
}

以前使用 Spring Boot 2.2.7 表单提交会将“c”从 HTML 表单(选择持有 Category 的 ID)转换为 SearchForm.java 中的 Category 实体

切换到 Spring Boot 2.3.1 后,这不再起作用。而是在日志中显示错误:

字段“c”上的对象“searchForm”中的字段错误:拒绝值 [424];代码 [typeMismatch.searchForm.c,typeMismatch.c,typeMismatch.com.thevegcat.app.category.Category,typeMismatch];参数 [org.springframework.context.support.DefaultMessageSourceResolvable:代码 [searchForm.c,c];论据 [];默认消息 [c]];默认消息 [无法将类型“java.lang.String”的属性值转换为属性“c”所需的类型“com.thevegcat.app.category.Category”;嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为属性“c”所需的类型“com.thevegcat.app.category.Category”:找不到匹配的编辑器或转换策略]]

【问题讨论】:

标签: java html spring spring-boot form-submit


【解决方案1】:

我认为这是 Spring Data Commons 的错误:

此错误影响 Spring Boot 版本 2.3.1、2.2.8 和 2.1.15。

ToEntityConverter 没有按预期工作。


[更新]

此错误已在 2.4.0-M1、2.3.2 和 2.2.9 上修复,但未在 2.1.16 上修复。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2012-10-27
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2019-01-14
    相关资源
    最近更新 更多