You may need to use LocalDateSerializer and LocalDateDeserializer for this.
ToDo class.
public class ToDo {
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate dueDate;
// getters and setters
}
LocalDateDeserializer.java
import java.time.LocalDate;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
private static final long serialVersionUID = 1L;
protected LocalDateDeserializer() {
super( LocalDate.class );
}
@Override
public LocalDate deserialize( JsonParser jp, DeserializationContext ctxt ) {
try {
return LocalDate.parse( jp.readValueAs( String.class ) );
}
catch (Exception e) {
// TODO: handle exception
return null;
}
}
}
LocalDateSerializer.java
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class LocalDateSerializer extends StdSerializer<LocalDate>
{
private static final long serialVersionUID = 1L;
public LocalDateSerializer()
{
super( LocalDate.class );
}
@Override
public void serialize( LocalDate value, JsonGenerator gen, SerializerProvider sp )
throws IOException, JsonProcessingException
{
gen.writeString( value.format( DateTimeFormatter.ISO_LOCAL_DATE ) );
}
}
And also you should pass date as a string Ex: "2019-02-01". Passing Date object from the front-end is not a good practice.
import { Component,Input } from '@angular/core';
import {TodoService} from './todo.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'ToDoApp';
constructor(private todoService: TodoService) {
}
@Input() toDoData = {name: '', dueDate: Date};
addToDo() {
this.toDoData.dueDate = // formatted date
this.todoService.addToDo(this.toDoData).subscribe((result) => {
this.todoService.addToDo(this.toDoData);
console.log(this.toDoData.dueDate);
});
}
convertToMilliseconds(dueDate: DateConstructor) {
return dueDate.valueOf();
}
}
java.util.Date,java.util.Calendar, andjava.text.SimpleDateFormatare now legacy, supplanted by the java.time classes built into Java 8 and later. See Tutorial by Oracle.@ RequestBodyand JSON