1. SpringBoot configura el fondo para pasar el formato de fecha al primer plano
En la aplicación Springboot, @RestController
en la serialización json predeterminada de las anotaciones, el formato de fecha predeterminado es: 2020-12-03T15:12:26.000+00:00
type display.
En la visualización real, necesitamos convertirlo al formato de visualización que necesitamos.
1.1 Método 1: Modificación del archivo de configuración
Configuración del perfil application.yml
:
spring: #Configure el formato de fecha jackson: formato de fecha: aaaa-MM-dd HH:mm:ss #La marca de tiempo se convierte uniformemente al formato especificado time -zone: GMT+8 #La zona horaria se modifica a East 8
application.properties
método de configuración
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss #La marca de tiempo se convierte uniformemente al formato especificado spring.jackson.time-zone=GMT+8 #La zona horaria se cambia a East 8
[Nota] La zona horaria debe modificarse aquí time-zone
: la zona horaria predeterminada de la base de datos es la hora del meridiano de Greenwich, si no se configura, será 8 horas menos que la hora real (hora de Beijing).
1.2 Método 2: anotar la clase de entidad javabean
I. @JsonFormat
Notas
@JsonFormat
Las anotaciones se usan en propiedades o métodos paraDate
convertir el tipo al tipo que necesitamos mostrar.
//Establece el formato que necesitas en el patrón @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime;
II. @DateTimeFormat
Notas
Agregue anotaciones en atributos de fecha que requieran conversión de formato de fecha
@DateTimeFormat(pattern = "需要转换的格式")
//La anotación convierte la forma de aaaa-MM-dd a Datos de fecha @DateTimeFormat(patrón = "aaaa-MM-dd HH:mm:ss") private Fecha cumpleaños;
III. @Temporal
Notas
A través de la anotación @Temporal se realiza la conversión del formato de fecha, el cual tiene sus propios parámetros de atributos, tales como:
Parámetros de anotación @Temporal | efecto |
---|---|
TipoTemporal.FECHA | @Temporal(TemporalType.DATE), obtendrá el formulario de fecha en formato aaaa-MM-dd. |
TemporalType.TIME | @Temporal(TemporalType.TIME), obtendrá la hora en formato HH:MM:SS. |
TemporalType.TIMESTAMP | @Temporal(TemporalType.TIMESTAMP), obtendrá el formato de fecha y hora en formato aaaa-MM-dd hh:MM:ss. |
@Temporal(TemporalType.TIMESTAMP) privado Date createTime;
2. Convertidor de formato de fecha global de configuración de SpringBoot
Configure la conversión de fechas con formato String y json recibidas de la página a tipos de fecha.
2.1 Configurar el convertidor de formulario de tipo cadena pasando parámetros a la fecha
importar org.springframework.core.convert.converter.Converter; importar org.springframework.stereotype.Component; importar org.springframework.util.StringUtils; importar java.text.DateFormat; importar java.text.SimpleDateFormat; importar java.util. ArrayList; import java.util.Date; import java.util.List; //Converter<S,T> S: representa el origen, el tipo de datos que se convertirá T: el tipo de destino, qué tipo de datos se convertirá @Component la clase pública GlobalFormDateConvert implementa Converter<String,Date> { //La inicialización estática define la lista de parámetros de cadena de fecha (es necesario convertirla) private static final List<String> paramList = new ArrayList<>(); //La inicialización estática puede establecer su formato de fecha private static final String param1 = "yyyy-MM"; cadena final estática privada param2 = "yyyy-MM-dd"; cadena final estática privada param3 = "yyyy-MM-dd HH:mm"; private static final String param4 = "yyyy-MM-dd HH:mm:ss"; //Bloque de código estático, agregando parámetros de fecha a la lista static { paramList.add(param1); paramList.add(param2); paramList.add (param3); paramList.add(param4); } //Función personalizada para convertir una cadena a Fecha Parámetro 1: La cadena de fecha pasada en el Parámetro 2: Parámetro de formato public Date parseDate(String source, String format) { System .out.println ("parseDate convert date"); Date date = null; try { // convertidor de formato de fecha DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(source); } catch (Exception e) { e.printStackTrace() ; } fecha de retorno; } //convertir método de conversión, s es la cadena de la fecha que se pasará @Override public Date convert(String source) { System.out.println("convert date format converter"); if(StringUtils. isEmpty (fuente)){ return null; } fuente = fuente.trim(); //Eliminar los espacios iniciales y finales DateFormat dateFormat = new SimpleDateFormat(param1); //expresión regular para determinar qué parámetro de formato si (fuente.coincidencias( "^ \\d{4}-\\d{1,2}$")) { return parseDate(source, paramList.get(0)); } else if (source.matches("^\\d{4 }- \\d{1,2}-\\d{1,2}$")) { return parseDate(source, paramList.get(1)); } else if (source.matches("^\\d {4 }-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { return parseDate(fuente, paramList.get(2)); } else if (fuente.coincidencias("^\\d{4}-\\d{1,2}-\\d{1,2} {1} \\d{1,2}:\\d{1,2}:\\d{1,2}$")) { } demás { throw new IllegalArgumentException("No se ha definido el formato de conversión de fecha de cadena a Fecha --> [Formato de fecha]: " + fuente); } } }
2.2 Configure el convertidor de fecha global para convertir datos Json a Fecha
importar java.text.FieldPosition; importar java.text.ParsePosition; importar java.text.SimpleDateFormat; importar java.util.Date; importar com.fasterxml.jackson.databind.util.StdDateFormat; importar org.springframework.util.StringUtils; clase pública GlobalJsonDateConvert extiende StdDateFormat { //Inicialización estática final, estática pública compartida instancia GlobalJsonDateConvert = new GlobalJsonDateConvert(); //Anula el método parse(String) para lograr @Override public Date parse(String dateStr, ParsePosition pos) { return getDate (dateStr, pos); } @Override public Date parse(String dateStr) { ParsePosition pos = new ParsePosition(0); return getDate(dateStr, pos); } Fecha privada getDate(String dateStr, ParsePosition pos) { System.out.println("json格式日期转换"); SimpleDateFormat sdf = null; if (StringUtils.isEmpty(dateStr)) { return null; } else if (dateStr.matches("^\\d{4}-\\d{1,2}$")) { sdf = new SimpleDateFormat("yyyy-MM"); return sdf.parse(dateStr, pos); } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { sdf = new SimpleDateFormat("yyyy-MM-dd "); return sdf.parse(dateStr, pos); } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{ 1,2}$")) { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); } else if (dateStr.matches("^\\d{4}-\\d{1, sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(dateStr, pos); } else if (dateStr.length() == 23) { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); return sdf.parse(dateStr, pos); } return super.parse(dateStr, pos); } @Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(fecha, aAppendTo, } @Override public GlobalJsonDateConvert clon() { devolver nuevo GlobalJsonDateConvert(); } }
2.3 Configurar beans para la gestión de Spring
importar com.fasterxml.jackson.annotation.JsonInclude; importar com.fasterxml.jackson.databind.ObjectMapper; importar com.xgf.online_mall.convert.GlobalFormDateConvert; importar com.xgf.online_mall.convert.GlobalJsonDateConvert; importar org.springframework.beans.factory.annotation.Autowired; importar org.springframework.context.annotation.Bean; importar org.springframework.context.annotation.Configuration; importar org.springframework.context.support.ConversionServiceFactoryBean; importar org.springframework.core.convert.ConversionService; importar org.springframework.core.convert.converter.Converter; importar org.springframework.http.MediaType; importar org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; importar java.util.ArrayList; importar java.util.List; importar java.util.HashSet; importar java.util.Set; @Configuration public class WebConfig { //JSON格式 全局日期转换器配置 @Bean public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2Htt pMessageConverter(); //设置日期格式 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(GlobalJsonDateConvert.instance); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapeoJackson2HttpMessageConverter.setObjectMapper(objectMapper); //设置中文编码格式 List<MediaType> list = new ArrayList<MediaType>(); list.add(MediaType.APPLICATION_JSON_UTF8); mapeoJackson2HttpMessageConverter.setSupportedMediaTypes(lista); return mappingJackson2Http MessageConverter; } //表单格式 全局日期转换器 @Bean @Autowired public ConversionService getConversionService(GlobalFormDateConvert globalDateConvert){ ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean(); Set<Converter> convertidores = new HashSet<>(); convertidores.add(globalDateConvert); factoryBean.setConverters(convertidores); volver factoryBean.getObject(); } }
como 2