Я недавно встречался с некоторыми компаниями, там есть какие-то Java-фреймворки и материалы интервью, кому нужно, могут получить сами в официальном аккаунте [ВВД программиста].
скажи заранее
В последнее время несколько сотрудников отдела обижались и увольнялись один за другим.После трех лет совместной работы они очень неохотно расставались с ними.В душе было нехорошее предчувствие,что это дело точно не так просто. После того, как я взял на себя проекты этих больших парней, моя догадка сбылась.В этот момент я на самом деле немного сожалею об этом, почему я не побил их, когда прощался! Хахаха~ И это желание побеждать людей становилось все сильнее и сильнее, когда я начал оптимизировать проекты нескольких братьев.
есть яма
Технический отдел организует кодекс прохождения и оптимизацию каждый месяц. В прошлом они рассмотрели и оптимизировали свои собственные проекты. Теперь, когда осталось несколько старших братьев, их проекты упали на мою голову. Самая болезненная вещь для программистов состоит в том, чтобы воспользоваться другими людьми и делать оптимизацию и трансформацию, потому что это не легче, чем рефакторинг проекта. Однако с военным заказом впереди нет никакого способа укусить пулю!
Первая точка оптимизации сделала меня немного сломленным. Навыки этих больших парней очень сильны, и они всегда были моими моделями для подражания, но почти все форматирование даты в проекте используется таким образом.SimpleDateFormat
, реализованный в виде следующего кода, эмм~, как может что-то сделать раненый человек, хахаха~
SvcOrderDailyStatisticsPo orderDailyStatisticsPo = new SvcOrderDailyStatisticsPo();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date stationTime = dateFormat.parse(dateFormat.format(svcWorkOrderPo.getPayEndTime()));
orderDailyStatisticsPo.setStatisticalDate(stationTime);
Да и API времени и даты в проекте тоже сбивает с толку, учитывая, чтоjava.util.Date
иjava.util.Calendar
Он не поддерживает часовой пояс и не является потокобезопасным.Вычисление даты относительно громоздкое.Технический отдел единодушно требует использования JDK1.8 или более поздней версии.java.time
LocalDateTime
. Но многие до сих пор используютjava.util.Date
иjava.util.Calendar
Дата обработки.
Оптимизация
Форматирование времени используется очень часто. Как сделать форматирование времени простым, не изобретая заново велосипед? Его следует абстрагировать и рассматривать как глобальный процесс форматирования даты. Далее кратко представлены в сочетании с практикой. Оптимизация.
Адрес теста:http://127.0.0.1:8080/timeTest
@GetMapping("/timeTest")
public OrderInfo timeTest() {
OrderInfo order = new OrderInfo();
order.setCreateTime(LocalDateTime.now());
order.setUpdateTime(new Date());
return order;
}
1. Аннотация @JsonFormat
использовать@JsonFormat
Аннотирование времени форматирования следует рассматривать как базовую операцию, большинство разработчиков используют этот метод, который прост и удобен.
/**
* @Author: xiaofu
* @Description:
*/
public class OrderInfo {
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
Тестовые результаты обнаруженыDate
тип иLocalDateTime
Типы все успешно отформатированы, но есть проблема, это все еще громоздко, нужно добавить поле даты каждого класса сущностей.@JsonFormat
Обратите внимание, количество повторяющихся работ не мало. Тогда посмотри вниз~
2. Глобальная конфигурация (1)
Springboot
уже предоставляет нам форматирование даты${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}
, здесь нам нужно выполнить глобальную настройку, конфигурация относительно проста, и нет необходимости добавлять атрибут класса сущности@JsonFormat
аннотация.
/**
* @Author: xiaofu
* @Description:
*/
public class OrderInfo {
//@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
//@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
просто используйте@Configuration
Определите класс конфигурации и внедрите дваBean
Вы можете завершить процесс глобального форматирования даты, который я сейчас использую в своем проекте.
/**
* @Author: xiaofu
* @Description:
*/
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
Этот способ может поддерживатьDate
тип иLocalDateTime
Типы сосуществуют, то проблема в том, что глобальный формат времени теперьyyyy-MM-dd HH:mm:ss
, но некоторые поля требуютyyyy-MM-dd
тогда вам нужно сотрудничать@JsonFormat
Использование аннотации, добавление атрибута определенного поля@JsonFormat
Аннотации достаточно, потому что@JsonFormat
Аннотация имеет более высокий приоритет и будет начинаться с@JsonFormat
Формат времени метки аннотации является основным.
3. Глобальная конфигурация (2)
Реализация этой глобальной конфигурации аналогична вышеописанному эффекту, однако следует отметить, что после использования этой конфигурации поля настраиваются вручную.@JsonFormat
Аннотации больше не будут действовать.
/**
* @Author: xiaofu
* @Description:
*/
public class OrderInfo {
//@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
//@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
/**
* @Author: xiaofu
* @Description:
*/
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
@Bean
@Primary
public ObjectMapper serializingObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.format(ofPattern(pattern)));
}
}
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException {
return LocalDateTime.parse(p.getValueAsString(), ofPattern(pattern));
}
}
}
Суммировать
поделилсяSpringboot
Маленькая хитрость в процессе разработки проекта, также я выплевываю ямки, встречающиеся при оптимизации проектов.Хотя оптимизация чужого кода дело относительно болезненное, но я действительно могу многому научиться в этом процессе.Улучшение навыков тоже очень помогает , потому что все они — сухие товары, которые на самом деле могут повысить эффективность разработки.
Небольшие преимущества:
Сотни различных технических электронных книг пересылаются друг другу, тсс~,бесплатноДайте мелких партнеров. Нет общественного внимания [Ответить666] Самовывоз