spring-data-rest - Spring Data Rest - 从未使用过 @JsonDeserializer
问题描述
我希望能够发布这样的东西
{
...
"foo": "http://localhost:8081/foos/2",
...
}
但只想将 2 作为 Long 存储在数据库中。因此,我创建了一个 JsonDeserializer 并像这样声明该字段:
@JsonDeserialize(using = RestResourceURLSerializer.class)
private Long foo;
RestResourceURLSerializer 看起来像这样:(我认为这不是很重要,但要给出完整的图片)
public class RestResourceURLSerializer extends JsonDeserializer<Long> {
@Override
public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
URL url = p.readValueAs(URL.class);
String path = url.getPath();
return Long.parseLong(path.substring(path.lastIndexOf('/') + 1));
}
}
我的问题是我在发布实体时收到此错误消息:https ://pastebin.com/JszRnaCc
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.lang.Long` from String "http://localhost:8081/foos/2": not a valid Long value
at [Source: (org.apache.catalina.connector.CoyoteInputStream); line: 1, column: 2935] (through reference chain: com.demo.Bar["foo"])
有趣的是,我在同一个项目中有一个不同的实体做同样的事情并且没有这些问题。任何想法如何解决?
解决方案
推荐阅读
- c# - 如何从两个表中正确创建联合,仅选择特定列,其中一列将用一些文本清空
- vue.js - Vuejs 检查一行是否不为空
- java - Volley Library 在 android 4.4 kitkat 上不起作用,为什么?
- python - 使用文本文件中的标题信息来组织数据框
- google-cloud-platform - 如何使用 gcp 从 Google Drive 复制文件
- reactjs - 轻触按钮即可输出组件 ReactJS
- postgresql - 如何在plpgsql中读写psql变量
- php - 如何在 PHP 中修复双引号/单引号
- php - 通过 pear 安装邮件后,Require_once 停止工作
- javascript - 动态下拉。切换仅在第一个下拉菜单中显示