Spring Boot忽略@JsonDeserialize和@JsonSerialize

我有一个带有RESTful端点的Spring Boot应用程序,我想为joda-time添加自定义序列化程序,但我无法让应用程序默认Jackson serailzier识别我的自定义端口。

我使用@RepositoryRestResource创建了RESTFul端点

@RepositoryRestResource(collectionResourceRel = "x", path = "x") public interface XRepository extends PagingAndSortingRepository { } 

然后我有一个GET调用来返回所有对象X:

HTTP://本地主机:8181 / X

这是我的序列化器:

 @Component public class JsonDateSerializer extends JsonSerializer { private static DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy"); @Override public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException { gen.writeString(formatter.print(value)); } } 

我将它添加到属性Getter,如下所示:

 @JsonSerialize(using=JsonDateSerializer.class) public DateTime getDateCreated() { return dateCreated; } 

这个序列化程序在普通应用程序中运行良好,但是当我尝试在Spring Boot应用程序中使用它时,这些序列化程序会被忽略。

如何让Spring Boot识别这些序列化程序?

好吧,经过多次煎熬,我找到了答案。 我使用错误的库来进行joda-datetime的序列化和反序列化。

我在用

org.codehaus.jackson

什么时候我应该使用

com.fasterxml.jackson

我想这是一个容易犯的错误,因为两个库都具有几乎相同的属性和方法,因为com.fasterxml.jackson构建在org.codehaus.jackson之上。

愚蠢的错误现在回顾但是学到的宝贵经验总是检查你使用正确的库!!!!

使用Spring MVC 4.2.1.RELEASE,您需要使用下面的新Jackson2依赖项来使Deserializer工作。

不要用这个

  org.codehaus.jackson jackson-mapper-asl 1.9.12  

改用它。

  com.fasterxml.jackson.core jackson-annotations 2.2.2   com.fasterxml.jackson.core jackson-core 2.2.2   com.fasterxml.jackson.core jackson-databind 2.2.2  

还可以使用com.fasterxml.jackson.databind.JsonDeserializer和com.fasterxml.jackson.databind.annotation.JsonDeserialize进行反序列化,而不是使用org.codehaus.jackson中的类。