我有一个带有RESTful终结点的Spring Boot应用程序,我想在joda-time时向其中添加自定义序列化程序,但是我无法获得该应用程序的默认Jackson ailailzier来识别我的自定义序列化程序。
我使用@RepositoryRestResource创建了RESTFul端点
@RepositoryRestResource(collectionResourceRel = "x", path = "x") public interface XRepository extends PagingAndSortingRepository<X, Long> { }
然后,我有一个GET调用来返回所有对象X:
http://本地主机:8181 / x
这是我的序列化器:
@Component public class JsonDateSerializer extends JsonSerializer<DateTime> { 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之上。
现在回想起来很愚蠢的错误,但是从中学到的宝贵经验总是使用正确的库检查您的!!!