Possuo um backend
em 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
.