小编典典

Spring Boot忽略@JsonDeserialize和@JsonSerialize

spring-boot

我有一个带有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识别这些序列化器?


阅读 675

收藏
2020-05-30

共1个答案

小编典典

好吧,经过多番折磨,我找到了答案。我在使用错误的库进行joda-datetime的序列化和反序列化。

我在用

org.codehaus.jackson

当我应该使用的时候

com.fasterxml.jackson

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

现在回想起来很愚蠢的错误,但是从中学到的宝贵经验总是使用正确的库检查您的!!!

2020-05-30