SpringBoot использует Джексона для форматирования времени

Spring Boot задняя часть
SpringBoot использует Джексона для форматирования времени

Это первый раз, когда я участвую в 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

image-20210602224447315.png

Этот результат явно не то, что нам нужно, поэтому нам нужно отформатировать время. А еще есть проблема с часовым поясом, у меня сейчас ночь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

image-20210602225019891.pngСделано, но у этого тоже есть недостаток, если у меня есть сотня объектов всеDatetype, то вам нужно добавить аннотации к сотне сущностей. Это кажется немного хлопотным.

Во-вторых, изменить конфигурацию по умолчанию.

всеjsonГенерация неотделима от родственныхHttpMessageConverters SpringBootИспользовать по умолчаниюjackson, и он настроен по умолчанию. Итак, давайте изменим его.

Глобальный поискJacksonHttpMessageConvertersConfiguration. Горячая клавиша идеи: Ctrl + shift + r

image-20210602225301478.png

В этом классе есть метод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будет использовать то, что мы предоставляем.

Аннотировать аннотацию сущности пользователя

image-20210602230527178.png

Интерфейс вызова:http://localhost:8080/getUser

image-20210602230903840.pngХорошо, этот путь тоже возможен.

Предоставить 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 image-20210602231142685.png

Примечание. Вышеуказанные два метода изменяются глобально!

Третья модификация конфигурационного файла

существует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
  • Если конфигурация второго метода и третьего метода существует одновременно, второй метод имеет преимущественную силу.

  • Если все три метода существуют, формат аннотации в классе сущностей является основным методом.

  • Если у вас есть какие-либо вопросы по этой статье или есть ошибки в этой статье, пожалуйста, оставьте комментарий. Если вы считаете, что эта статья была вам полезна, ставьте лайк и подписывайтесь на нее.