Maison  >  Article  >  Java  >  Comment SpringBoot utilise Jackson pour formater l'heure

Comment SpringBoot utilise Jackson pour formater l'heure

WBOY
WBOYavant
2023-05-25 20:34:041089parcourir

Préparation

Créez le projet, ajoutez des dépendances

<dependency>
	<groupid>org.springframework.boot</groupid>
	<artifactid>spring-boot-starter-web</artifactid>
</dependency>

Créez la classe d'entité UserDTO

Ajoutez des attributs et omettez les méthodes get et set.

private String id;
private String username;
private Date createTime;

Créer un contrôleur utilisateur

Écrivez le code de la couche de contrôle

@RestController
public class UserController {
    @GetMapping("/getUser")
    public List<userdto> getUser() {
        List<userdto> userList = new ArrayList<userdto>();
        for (int i=1; i<p>Appelez l'interface : http://localhost:8080/getUser</p>
<p><img src="https://img.php.cn/upload/article/000/887/227/168501804652134.png" alt="Comment SpringBoot utilise Jackson pour formater lheure"></p>
<p>Le résultat n'est évidemment pas ce dont nous avons besoin, nous devons donc formater l'heure. Et il y a un problème de fuseau horaire, mon heure actuelle est 22h44. </p>
<h4>La première méthode consiste à utiliser des annotations<br>
</h4>
<p>Ajoutez l'annotation @JsonFormat sur les champs qui doivent être convertis. Cette annotation provient de Jackson et est intégrée au package Web. </p>
<pre class="brush:php;toolbar:false">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;

modèle : le format de l'heure et de la date qui doivent être convertis

fuseau horaire : l'heure est réglée sur le huitième district de l'Est pour éviter les erreurs de temps lors de la conversion

Interface d'appel : http://localhost:8080/ getUser

Comment SpringBoot utilise Jackson pour formater lheure

Complete , mais cela présente aussi des inconvénients Si j'ai cent entités qui ont toutes le type Date, alors je dois ajouter des annotations à cent entités. Cela semble un peu gênant.

La deuxième méthode consiste à modifier la configuration par défaut

Toute génération json est indissociable des HttpMessageConverters associés

SpringBoot utilise jackson par défaut et le configure par défaut. Alors modifions-le.

Recherche globale de JacksonHttpMessageConvertersConfiguration. Touche de raccourci idée : Ctrl + shift + r

Comment SpringBoot utilise Jackson pour formater lheure

Il existe une méthode mappingJackson2HttpMessageConverter dans cette classe qui est utilisée pour traiter 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);
}

Notez qu'il y a deux annotations sur cette méthode, et l'annotation @Bean ne sera pas introduite. Introduisez l'annotation ConditionalOnMissingBean.

@ConditionalOnMissingBean : Lorsque le bean donné n'existe pas, instanciez le bean actuel.

Une analogie : lorsque vous vous présentez à un emploi, votre entreprise verra que vous avez apporté un ordinateur et vous permettra d'utiliser votre propre ordinateur. Si vous n'apportez pas d'ordinateur, elle vous laissera utiliser l'ordinateur de l'entreprise. SpringBoot fait la même chose si vous ne le fournissez pas, il utilisera celui par défaut.

New 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;
    }
}

fournit un Bean de MappingJackson2HttpMessageConverter, donc Springboot utilisera ce que nous fournissons.

Annoter l'annotation de l'entité Utilisateur

Comment SpringBoot utilise Jackson pour formater lheure

Appelez l'interface : http://localhost:8080/getUser

Comment SpringBoot utilise Jackson pour formater lheure

OK, cette méthode est également possible.

Provide ObjectMapper

Vous pouvez également fournir un ObjectMapper et commenter le MappingJackson2HttpMessageConverter fourni ci-dessus.

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;
}

Interface d'appel : http://localhost:8080/getUser

Comment SpringBoot utilise Jackson pour formater lheure

Remarque : les deux méthodes ci-dessus sont globalement modifiées !

La troisième modification du fichier de configuration

Modifier la configuration par défaut dans application.yml ou propriétés

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

Si la configuration de la deuxième et de la troisième voies existent en même temps, utilisez la deuxième voie Seigneur .

Si les trois méthodes existent, le format d'annotation dans la classe d'entité sera le principal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer