2013-12-11 1 views
2

У меня есть проблемы с собственным полем форматирования Date в Ebean модели, когда я пытаюсь вернуть JSON в методе результата контроллериграть ebean после Json.toJson()

ok(Json.toJson(userObj)); 

Мой код пример:

@Entity 
@Table(name = "user") 
public class User extends Model { 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq") 
    public Integer id; 

    @Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss") 
    public Date last_login; 
... 
} 

Таблица находится в базе данных postgresql - поле last_login - это метка времени.

Json результат:

{"id":202,"last_login":1386775797494,...} 

Может кто-нибудь объяснить мне, как заставить его работать?

С наилучшими пожеланиями, Lukas

ответ

8

После поиска по всему интернету, я нашел два решения:

1.Create пользовательских сериализатору как:

JsonDateSerializer класс:

public class JsonDateSerializer extends JsonSerializer<Date> { 
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

    @Override 
    public void serialize(
      Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException { 

     String formattedDate = dateFormat.format(date); 
     jgen.writeString(formattedDate); 
    } 
} 

и аннотатное поле в модели:

@JsonSerialize(using = JsonDateSerializer.class) 
public Date last_login; 

Это решение не является гибким, потому что вы не можете поместить второй параметр в формат даты в аннотации @JsonSerialize, поэтому вам нужно создать следующий класс сериализации, если вы хотите иметь пару форматов даты.

2. @ JsonFormat

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss") 

Здесь вы можете определить шаблон в аннотации так является более гибким в моем случае.

+0

+1 thumbsup для двух вариантов! – WarFox

0

Json.toJson(object) использует Джексон, который принимает Mapper, в вашем случае ответ было бы:

ObjectMapper mapper = new ObjectMapper(); 
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    mapper.setDateFormat(outputFormat); 
    Json.setObjectMapper(mapper); 
    return ok(Json.toJson(object)); 

Затем вы можете обернуть это для будущих ocassions.

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

  • Нет связанных вопросов^_^