Possuo um backendem Java, JAX-RS(Wildfly 13) com Jackson
.
A maioria esmagadora das minhas entidades possuem campos de data, utilizo LocalDate e LocalDateTime, por esse fato, acabei criando Serializers e Deserializers no Jackson pra poder trafegar os JSONs do backend pro frontend e vice e versa.
Data serializada: 1541351240309
Data deserializada: '2018-11-04 15:07:35'Acontece que meu frontend, que é em Angular, ao receber essa data, não recebe um objeto do tipo javascript Date, visto que é um miliseconds, pra eu ter acesso ao objeto do tipo Date, preciso criar uma classe TypeScript e um parser pra receber o miliseconds e transformar em um Date.
Fiz da seguinte maneira:
Recebo no Front o seguinte JSON:
{
name: 'Name',
birthday: 1541351240309
}recebo no serviço e faço um parser pra uma classe com o tipo Date da seguinte maneira:
export class Person {
private name: string;
private birthday: Date;
constructor(name:string, birthday: Date){
this.name = name;
this.birthday = birthday;
}
}
export class PersonJsonParser {
getPersonByJson(personJson){
return new Person(
personJson.name,
new Date(personJson.birthday)
);
}
}
//no meu service, utilizo da seguinte maneira;
export class PersonService {
constructor(private http: HttpClient,
private personJsonParser: PersonJsonParser){
}
getPerson(){
this.http.get<Person>(...)
.pipe(map(personJson => this.personJsonParser.getPersonByJson(personJson)))
}
}
Acontece que essa solução que desenvolvi achei muito verbosa, visto que em basicamente todas as minhas requisições preciso estar fazendo esses pipe(map) e criando esses JsonParsers. Já virou até um padrão do meu projeto.
Gostaria de saber se essa é a melhor solução ou se existe uma solução melhor de resolver esse problema com datas.
Tenho liberdade de tanto alterar a abordagem utilizada no backend como no frontend.