在 SpringBoot 中使用 spring.jackson.date-format 只会对 Date 类型进行格式化,而使用 @JsonFormat 和 @DataTimeFormat 只能针对单个属性进行格式化,比较麻烦,所以需要一个全局的格式化
输入输出数据时格式化
- 方法里使用的常量来自 hutool
- Controller 里直接使用 LocalDateTime 接收参数时还需指定 @DateTimeFormat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @Configuration public class JacksonConfig {
@Bean public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> { builder.locale(Locale.CHINA); builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault())); builder.simpleDateFormat(NORM_DATETIME_PATTERN); builder.modules(getJavaTimeModule()); }; }
public static JavaTimeModule getJavaTimeModule() { JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(NORM_DATETIME_PATTERN))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(NORM_DATE_PATTERN))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(NORM_TIME_PATTERN))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(NORM_DATETIME_PATTERN))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(NORM_DATE_PATTERN))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(NORM_TIME_PATTERN))); return javaTimeModule; } }
|
对象转Json时格式化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| @Slf4j public class JSONUtil {
private static final ObjectMapper objectMapper = new ObjectMapper();
static { objectMapper.registerModule(JacksonConfig.getJavaTimeModule()); objectMapper.setDateFormat(new SimpleDateFormat(NORM_DATETIME_PATTERN)); objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); } public static <T> String toJson(T object) { try { return objectMapper.writeValueAsString(object); } catch (IOException e) { log.warn("Parse object to string error", e); return null; } }
public static <T> String toPrettyJson(T object) { try { return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); } catch (IOException e) { log.warn("Parse object to string error", e); return null; } }
public static <T> T fromJson(String str, Class<T> clazz) { try { return objectMapper.readValue(str, clazz); } catch (Exception e) { log.warn("Parse String to object error!", e); return null; } }
public static <T> T fromJson(String json, TypeReference<T> typeReference) { try { return objectMapper.readValue(json, typeReference); } catch (Exception e) { log.warn("Parse String to object error", e); return null; } } }
|