当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf表单无法处理org.bson.document类型

仲孙文乐
2023-03-14

我有一个包含org.bson.document类型字段的实体类。这些值是我不允许修改的,但是当使用Spring数据时,我需要将它们映射到我的model类中,这样在将文档保存回Mongo后,这些值就不会丢失。因此从Mongo获取文档,映射到userPOJO,然后传递给Thymeleaf表单。当我尝试将Thymeleaf表单发送回控制器时,我收到了400个错误的请求“对象的验证失败...”错误,我知道这是因为这两个附加的document字段。我如何将这些字段传递给Thymeleaf,然后再传递回控制器?它们在表单中没有修改,只是作为隐藏输入出现:

<input id="resetPassword" th:field="${user.resetPassword}" type="hidden"/>
<input id="consents" th:field="${user.consents}" type="hidden"/>

和我的user类:

@Data
@Document(collection = "users")
@NoArgsConstructor
public class User {

    @Id
    private ObjectId id;

    private String email;
    private String name;
    private String surname;
    private String phone;
    private String password;
    private String country;
    private SecurityLevel securityLevel = SecurityLevel.LOW;
    private Timestamp created = Timestamp.from(Instant.now());
    private Boolean blocked = false;

    private org.bson.Document resetPassword;
    private org.bson.Document consents;
}

共有1个答案

屠君墨
2023-03-14

听起来,对象被成功地注入到Thymeleaf模板中,但在返回表单时没有在Spring中正确解析。

您应该检查web页面中的表示形式(应该是JSON吗?)然后确保您在Spring中定义了一个可以成功反序列化返回对象的处理程序。

如果文档类型没有常规的构造函数(no-args或all-args),或者某些字段是“隐藏的”(没有标准的getXxx和setXxx方法),那么当表单提交时Spring将无法在没有自定义处理程序的情况下重构对象。

类似地,如果对象的所有字段(和子字段)都没有getter,Thymeleaf模板将嵌入一个无法正确上传的不完整对象。

有关更多信息,请查看这篇博文:https://www.rainerhahnekamp.com/en/spring-mvc-json-serialization/

 类似资料:
  • 我正在使用spring-mvc和Thymeleaf开发一个内部工具。 这个工具的一部分用于创建我们保存在数据库中的实体。这个实体相当复杂;它包含许多性质和关系。其中一些关系包含列表和其他属性。 我有两个限制: null 使用Thymeleaf呈现基本页面。使用JavaScript创建html元素,而不是提交到@ModelAttribute,我将表单序列化到JSON并将此JSON提交到服务器。(客户

  • 我想知道如何在spring表单mvc平台中传输参数。首先,下面的代码是spring格式的java文件。 下一个文件是有界编辑。html文件 表单的输入链接url如下所示, 但是spring mvc控制器代码中抛出了异常。 例外的是 我不知道如何在Spring-Thymeleaf表单模板中传递参数。

  • 本文章将介绍Thymeleaf中实现表单的语法和概念。 编辑源代码以便将产品列表中的某个数据。已经将类的对象列表设置为具有变量名称的上下文模型(参考:中的实现)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项目的过程,这里将只介绍如何使用 Spring表达式和标签。 这里创建一个Maven Web项目: thymeleaf-tutorials ,其目

  • 表单是让用户与我们的网页应用程序交互的基本元素。Flask 本身并不会帮助我们处理表单,但是 Flask-WTF 扩展让我们在我们的 Flask 应用程序中使用流行的 WTForms 包。这个包使得定义表单和处理提交容易一些。 Flask-WTF 我们想要使用 Flask-WTF 做的第一件事情(在安装它以后)就是在 myapp.forms 包中定义一个表单。 # ourapp/forms.py

  • 在阅读之前,请注意,我对Thymeleaf、Spring和Mockito是新的。所以我希望我会犯一些业余错误。 我正在编写代码发送电子邮件使用thymeleaf HTML模板。我一直在网上看不同的教程,并尝试设置一切。我认为我的设置很好,但是当我编写一个测试来检查模板是否正在被处理时,我得到的是“null”而不是某种形式的字符串。 这是一个测试类(它的一部分),我在其中得到错误,SpringTem

  • 我使用Spring boot和Thymeleaf模板引擎,并尝试使用th:classappend属性为添加可选的“has error”类 但是我有这个错误 无法使用表达式“*”绑定表单错误。请检查此表达式是否在适当的上下文中执行(例如,具有th:object属性的a) 我的控制器方法 我做错了什么?