java - Thymeleaf 表单无法处理 org.bson.Document 类型
问题描述
我有一个带有 type 字段的实体类org.bson.Document
。这些是我不允许修改的值,但是在使用 Spring Data 时,我需要将它们映射到我的模型类中,以便在将文档保存回 Mongo 后,这些值不会丢失。因此,从 Mongo 获取文档,映射到User
POJO,然后传递到 Thymeleaf 表单。当我尝试将 Thymeleaf 表单发送回控制器时,我收到 400 Bad Request "Validation failed for object..." 错误,我知道这是因为这两个附加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;
}
解决方案
我通过创建这样的自定义来解决它Formatter
:
public class BsonDocumentFormatter implements Formatter<Document> {
@Override
public Document parse(String s, Locale locale) throws ParseException {
return Document.parse(s);
}
@Override
public String print(Document document, Locale locale) {
return document.toJson();
}
}
然后我在我的WebMvcConfigureruration
:
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new BsonDocumentFormatter());
}
推荐阅读
- fiddler - Fiddler 未捕获来自特定应用程序的流量
- ruby-on-rails - 从 cron 任务调用时 Rails.logger.debug 去哪里了?
- react-native - 手机设置中未启用位置权限时应用崩溃
- java - 继承和内存分配
- python - 按作者姓名过滤后如何计算平均分?
- java - 部署队列触发天蓝色函数时在哪里指定连接字符串
- python - 如果您将 DataFrame 保存到磁盘,如果您在脚本中使用该 DataFrame,Spark 会加载该数据吗?
- javascript - 如何使用 typescript 对象呈现局部视图
- coq - 我想证明一些关于列表的属性,但我陷入了归纳
- scala - 连接到 Spark 集群时的序列化问题