首页 > 解决方案 > 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"])

有趣的是,我在同一个项目中有一个不同的实体做同样的事情并且没有这些问题。任何想法如何解决?

标签: spring-data-rest

解决方案


推荐阅读