hora - json date to dd/mm/yyyy
Fecha de serialización JSON en un formato personalizado(No se puede construir la instancia de java.util.Date desde el valor de la cadena) (4)
could not read JSON: Can not construct instance of java.util.Date from String
value ''2012-07-21 12:11:12'': not a valid representation("yyyy-MM-dd''T''HH:mm:ss.SSSZ", "yyyy-MM-dd''T''HH:mm:ss.SSS''Z''", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
al pasar la solicitud json al método del controlador REST en una clase POJO. el usuario debe ingresar solo en el formato de fecha y hora por debajo de lo que debería arrojar el mensaje. ¿Por qué DateSerializer no está llamando?
add(@Valid @RequestBody User user)
{
}
json:
{
"name":"ssss",
"created_date": "2012-07-21 12:11:12"
}
variable de clase pojo
@JsonSerialize(using=DateSerializer.class)
@Column
@NotNull(message="Please enter a date")
@Temporal(value=TemporalType.TIMESTAMP)
private Date created_date;
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
logger.info("serialize:"+value);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info("DateSerializer formatter:"+formatter.format(value));
jgen.writeString(formatter.format(value));
}
- Si desea vincular una cadena JSON a la fecha, este proceso se denomina "deserialización", no serialización.
- Para enlazar una cadena JSON a la fecha, crear una deserialización de fecha personalizada, anotar "fecha_creado" o su configurador con @JsonDeserialize (utilizando = YourCustomDateDeserializer.class) donde debe implementar el método "public Date deserialize (...)" para contar Jackson cómo convertir una cadena en una fecha.
Disfrutar.
Haga una anotación en el campo fecha_creado con la anotación JsonFormat para especificar el formato de salida.
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
Otra forma es tener un objeto Date personalizado que se encargue de su propia serialización.
Aunque realmente no creo que extender objetos simples como Date
, Long
, etc. es una buena práctica, en este caso particular hace que el código sea fácil de leer, tiene un único punto donde el formato está definido y es más que menos compatible con objeto de Date
normal.
public class CustomFormatDate extends Date {
private DateFormat myDateFormat = ...; // your date format
public CustomFormatDate() {
super();
}
public CustomFormatDate(long date) {
super(date);
}
public CustomFormatDate(Date date) {
super(date.getTime());
}
@JsonCreator
public static CustomFormatDate forValue(String value) {
try {
return new CustomFormatDate(myDateFormat.parse(value));
} catch (ParseException e) {
return null;
}
}
@JsonValue
public String toValue() {
return myDateFormat.format(this);
}
@Override
public String toString() {
return toValue();
}
}
Tengo el mismo problema, entonces escribo una deserialización de fecha personalizada con @JsonDeserialize(using=CustomerDateAndTimeDeserialize.class)
public class CustomerDateAndTimeDeserialize extends JsonDeserializer<Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
@Override
public Date deserialize(JsonParser paramJsonParser,
DeserializationContext paramDeserializationContext)
throws IOException, JsonProcessingException {
String str = paramJsonParser.getText().trim();
try {
return dateFormat.parse(str);
} catch (ParseException e) {
// Handle exception here
}
return paramDeserializationContext.parseDate(str);
}
}