java spring-boot date jackson format

java - Spring Boot Jackson fecha y formato de fecha y hora



spring-boot date (1)

En primer lugar, el método Date.toString genera resultados Date.toString y no debemos confiar en ello. Ejemplo simple:

SimpleDateFormat dateToStringFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", new Locale("us")); Date parsed = dateToStringFormat.parse("Wed Mar 20 09:00:00 KST 2019"); System.out.println("Default toString: " + parsed); dateToStringFormat.setTimeZone(TimeZone.getTimeZone("Asia/Seoul")); System.out.println("With ''Asia/Seoul'' TZ: " + dateToStringFormat.format(parsed)); dateToStringFormat.setTimeZone(TimeZone.getTimeZone("Chile/Continental")); System.out.println("With ''Chile/Continental'' TZ: " + dateToStringFormat.format(parsed));

huellas dactilares:

Default toString: Wed Mar 20 01:00:00 CET 2019 With ''Asia/Seoul'' TZ: Wed Mar 20 09:00:00 +0900 2019 With ''Chile/Continental'' TZ: Tue Mar 19 21:00:00 -0300 2019

Como puede ver, analicé su fecha de ejemplo el Wed Mar 20 09:00:00 KST 2019 e Wed Mar 20 09:00:00 KST 2019 usando el método toString y formateado con dos zonas horarias diferentes. Entonces, todos ven la fecha combinada con su zona horaria. Leer más sobre:

No podemos definir patrones de fecha en la configuración como usted propuso. Vea las opciones de configuración de Jackson disponibles aquí .

Puede configurar el formato utilizando la anotación com.fasterxml.jackson.annotation.JsonFormat . Ya que Java 8 está disponible, deberíamos usar las clases java.time.* Para las propiedades relacionadas con el tiempo. Ejemplo de clase POJO podría gustar esto:

import com.fasterxml.jackson.annotation.JsonFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.MonthDay; public class RequestPayload { @JsonFormat(pattern = "MM/dd") private MonthDay md; @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate date; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime; // getters, setters, toString }

Para que funcione, necesitamos registrar el módulo JavaTimeModule :

@Bean public Jackson2ObjectMapperBuilder objectMapperBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); builder.modules(new JavaTimeModule()); return builder; }

Si puede cambiar sus propiedades de Bean a java.time.* clases simplemente propagan estas fechas de Controller a DB . En otro caso, vea esta pregunta: Conversión entre java.time.LocalDateTime y java.util.Date .

configuración de application.yml :

jackson: date-format: yyyy-MM-dd timestamp-format:yyyy-MM-dd HH:mm:ss serialization: write-dates-as-timestamps: false

Propiedades del frijol:

@Entity @Column(nullable = false) @GeneratedValue(strategy=GenerationType.IDENTITY) @Temporal(TemporalType.DATE) private Date date_created; @Column(nullable = false) @GeneratedValue(strategy=GenerationType.IDENTITY) @Temporal(TemporalType.TIMESTAMP) private Date reg_date;

Configuré todos los campos de Date como java.util.Date fecha que recibió la fecha en formato yyyy-MM-dd y tipo de marca de hora ( yyyy-MM-dd HH:mm:ss ) de acuerdo con el estilo param de solicitud ( yyyy-MM-dd o yyyy-MM-dd HH:mm:ss )

Para usar la timestamp , encontré @Temporal ( TemporalType.Date o Timestamp ) que se asigna por DB Type .

El formato de fecha y hora se almacena correctamente como yyyy-MM-dd o yyyy-MM-dd HH:mm:ss.sss

Clase RestController :

@PostMapping("/") public ResponseEntity<Object> create(@RequestBody CreateVO createVO, HttpServletRequest request) { System.out.println("planned_date> "+createVO.getDate_planned_start()); System.out.println("regdate> "+createVO.getReg_date()); }

Se establecen en:

planned_date> Wed Mar 20 09:00:00 KST 2019 // Date Result regdate> Mon Oct 01 16:45:00 KST 2012 //Timestamp Result

Sin embargo, recibo en RestController Date en un formato diferente al que esperaba.

¿Hay alguna solución para recibir yyyy-MM-dd y yyyy-MM-dd HH:mm:ss en el Controller ?

Me estoy preguntando acerca de la configuración de application.yml también. Porque no estoy seguro de cómo configurar el formato de marca de tiempo.