Ejemplo detallado de configuración del convertidor de formato de fecha global para la conversión de formato de fecha SpringBoot

1. SpringBoot configura el fondo para pasar el formato de fecha al primer plano

En la aplicación Springboot, @RestControlleren la serialización json predeterminada de las anotaciones, el formato de fecha predeterminado es: 2020-12-03T15:12:26.000+00:00type 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.propertiesmé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.  @JsonFormatNotas

@JsonFormatLas anotaciones se usan en propiedades o métodos para Dateconvertir 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.  @DateTimeFormatNotas

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.  @TemporalNotas

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

 

Supongo que te gusta

Origin blog.csdn.net/zhongguowangzhan/article/details/128401906
Recomendado
Clasificación