Это первый раз, когда я участвую в Gengwen Challenge.7День, подробности о событии уточняйте:Обновить вызов
Со временем капли воды и камни изнашиваются 😄
В реальной разработке мы часто имеем дело со временем, что связано с проблемой преобразования формата времени. Далее мы представим некоторые изSpirngBoot
Как преобразовать формат времени в .
Готов к работе
Создайте проект и добавить зависимости
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Создайте класс сущностей UserDTO
Добавить свойства, методы get и set опущены.
private String id;
private String username;
private Date createTime;
Создать пользовательский контроллер
Напишите код управляющего слоя
@RestController
public class UserController {
@GetMapping("/getUser")
public List<UserDTO> getUser() {
List<UserDTO> userList = new ArrayList<UserDTO>();
for (int i=1; i<=3; i++) {
UserDTO user = new UserDTO();
user.setCreateTime(new Date());
user.setUsername("gongj" + i);
user.setId("j" + i);
userList.add(user);
}
return userList;
}
}
Интерфейс вызова:http://localhost:8080/getUser
Этот результат явно не то, что нам нужно, поэтому нам нужно отформатировать время. А еще есть проблема с часовым поясом, у меня сейчас ночь22:44
.
Первый использует аннотации
Увеличение полей, которые необходимо преобразовать@JsonFormat
Аннотация, аннотацияjackson
Да, веб-пакет интегрирован.
import com.fasterxml.jackson.annotation.JsonFormat;
private String id;
private String username;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
- шаблон: формат даты и времени для преобразования
- часовой пояс: время установлено в восточно-восьмом округе, чтобы избежать ошибок при преобразовании времени.
Интерфейс вызова:http://localhost:8080/getUser
Сделано, но у этого тоже есть недостаток, если у меня есть сотня объектов всеDate
type, то вам нужно добавить аннотации к сотне сущностей. Это кажется немного хлопотным.
Во-вторых, изменить конфигурацию по умолчанию.
всеjson
Генерация неотделима от родственныхHttpMessageConverters
SpringBoot
Использовать по умолчаниюjackson
, и он настроен по умолчанию. Итак, давайте изменим его.
Глобальный поискJacksonHttpMessageConvertersConfiguration
. Горячая клавиша идеи: Ctrl + shift + r
В этом классе есть методmappingJackson2HttpMessageConverter
Он используется для обработки json.
@Bean
@ConditionalOnMissingBean(
value = {MappingJackson2HttpMessageConverter.class},
ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter"}
)
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
Обратите внимание, что к этому методу есть две аннотации:@Bean
Примечания не вводятся. представлятьConditionalOnMissingBean
аннотация.
@ConditionalOnMissingBean
: Когда дано вbean
Если он не существует, создайте экземпляр текущегоBean
.
Проведем аналогию: когда вы регистрируетесь на работу, ваша компания разрешает вам использовать свой собственный компьютер, если вы приносите компьютер, если вы не приносите компьютер, вас попросят использовать компьютер компании.SpringBoot
Это также делается таким образом, если вы не предоставляете его, используйте его по умолчанию.
Новый MyConfig
import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class MyConfig {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverterConfiguration() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper om = new ObjectMapper();
//全局修改josn时间格式
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
converter.setObjectMapper(om);
return converter;
}
}
предоставилMappingJackson2HttpMessageConverter
изBean
,такSpringboot
будет использовать то, что мы предоставляем.
Аннотировать аннотацию сущности пользователя
Интерфейс вызова:http://localhost:8080/getUser
Хорошо, этот путь тоже возможен.
Предоставить ObjectMapper
Также возможно предоставлениеObjectMapper
, приведенное вышеMappingJackson2HttpMessageConverter
Закомментируйте.
import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
@Bean
ObjectMapper objectMapper() {
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
return om;
}
Интерфейс вызова:http://localhost:8080/getUser
Примечание. Вышеуказанные два метода изменяются глобально!
Третья модификация конфигурационного файла
существуетapplication.yml
илиproperties
Изменить конфигурацию по умолчанию
yml
spring:
jackson:
date-format: yyyy/MM/dd
timezone: GMT+8
properties
spring.jackson.date-format=yyyy-MM-dd HH:mm
spring.jackson.time-zone=GMT+8
-
Если конфигурация второго метода и третьего метода существует одновременно, второй метод имеет преимущественную силу.
-
Если все три метода существуют, формат аннотации в классе сущностей является основным методом.
-
Если у вас есть какие-либо вопросы по этой статье или есть ошибки в этой статье, пожалуйста, оставьте комментарий. Если вы считаете, что эта статья была вам полезна, ставьте лайк и подписывайтесь на нее.