2014-12-28 5 views
1

Использование Spring Boot, Spring MVC и возврат POJO со списком. Поле Date не сериализуется, когда поле аннотируется моим пользовательским JsonSerializer (@JsonSerialize (с использованием = DateTimeSerializer.class)).Spring MVC JSON serialization @JsonSerialize игнорируется

JsonSerializer.serialize не называется.

Как я могу заставить это работать - заставить Джексона вызвать мои пользовательские Сериализаторы? Я могу расширить ObjectMapper и установить что-то, но до сих пор ничего не работало.

Я попытался аннотировать геттеры, но здесь не было никакого успеха.

Использование Spring 4, Jackson 2.4.4, включает все зависимости Jackson (привязка данных, аннотации, ядро). Я включил Spring OXM.

DateTimeSerializer класс:

import java.io.IOException; 
import java.util.Date; 

import com.fasterxml.jackson.core.JsonGenerator; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.JsonSerializer; 
import com.fasterxml.jackson.databind.SerializerProvider; 

public class DateTimeSerializer extends JsonSerializer<Date> { 

    @Override 
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     gen.writeString(DateUtil.toCzechDateTime(date)); 
    } 
} 

DateUtil.toCzechDateTime мой собственный метод и работает нормально - возвращает строку, которую я хочу.

+0

можете ли вы опубликовать свой класс DateTimeSerializer? – RE350

+0

Вот оно, я отредактировал мой пост. – Xdg

+0

Кроме того, можете ли вы предоставить POJO, где вы используете '@ JsonSerialize'? – wassgren

ответ

2

Как обходные:

Вы можете реализовать свой собственный класс ObjectMapper и установить формат даты в глобальном масштабе. (Edit ниже кода соответственно)

public class CustomObjectMapper extends ObjectMapper { 

    public SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); 

    public CustomObjectMapper() { 
     super(); 
     super.setDateFormat(df); 
    } 

Или вы можете добавить DateUtil.toCzechDateTime(date) к вашему POJO в добытчика и игнорировать оригинальный метод получения. И верните новый геттер, используя @JsonProperty("date").

+0

Да, я сделал это так. Всегда есть обходное решение, и нет времени думать об этом навсегда. Благодарю. – Xdg

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