2015-05-21 4 views
4

У меня есть приложение Spring Boot с конечными точками RESTful, которые я хочу добавить пользовательские сериализаторы для joda-time, но я не могу получить стандартное приложение Jackson serailzier, чтобы распознать свой пользовательский.Spring Boot игнорирует @JsonDeserialize и @JsonSerialize

Я создал успокоительные конечные точки с помощью @RepositoryRestResource

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

Я тогда GET вызов вернуть весь объект Икса:

http://localhost: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 приложения загрузки эти сериализаторов игнорируются.

Как я могу получить Spring Boot для распознавания этих сериализаторов?

+0

Покажите нам, где вы попробуйте его сериализовать. –

+0

Какую версию Джексона вы пытаетесь использовать в аннотации '@ JsonDeserializer'? – jbarrueta

+0

@SotiriosDelimanolis Я делаю вызов POST, используя следующий JSON {"invoiceId": "1", "feeds": [{"dateCreated": "1/1/1"}]}, затем Spring Boot автоматически пытается сериализовать Это. – Schokea

ответ

4

Хорошо, после многих мучений я узнал ответ. Я использовал неправильную библиотеку для сериализации и десериализации joda-datetime.

Я использовал

org.codehaus.jackson

, когда я использую

com.fasterxml.jackson

Я предполагаю, что это является простой ошибкой, поскольку обе библиотеки имеют почти идентичные свойства и методы, потому что com.fasterxml.jackson построен поверх org.codehaus.jackson.

Глупая ошибка, оглядывающаяся назад, но ценный урок, который выучили ВСЕГДА проверить, что вы используете правильную библиотеку !!!!

2

С Spring MVC 4.2.1.RELEASE вам необходимо использовать новые зависимости Jackson2, как показано ниже для работы Deserializer.

Dont использовать этот

<dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.12</version> 
     </dependency> 

Используйте это вместо.

<dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.2.2</version> 
     </dependency> 

Также используйте com.fasterxml.jackson.databind.JsonDeserializer и com.fasterxml.jackson.databind.annotation.JsonDeserialize для десериализации, а не классы от org.codehaus.jackson

Смежные вопросы