ホームページ >Java >&#&チュートリアル >SpringBoot がジャクソンを使用して時間をフォーマットする方法

SpringBoot がジャクソンを使用して時間をフォーマットする方法

WBOY
WBOY転載
2023-05-25 20:34:041122ブラウズ

準備

プロジェクトを作成し、依存関係を追加します

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

UserController の作成

コントロール層コードの書き込み

@RestController
public class UserController {
    @GetMapping("/getUser")
    public List<userdto> getUser() {
        List<userdto> userList = new ArrayList<userdto>();
        for (int i=1; i<p>呼び出しインターフェイス: http://localhost:8080/getUser</p>
<p><img src="https://img.php.cn/upload/article/000/887/227/168501804652134.png" alt="SpringBoot がジャクソンを使用して時間をフォーマットする方法"></p> <p>この結果は明らかに必要なものではないため、時刻をフォーマットする必要があります。タイムゾーンの問題もあります。私の現在の時刻は午後 22 時 44 分です。 </p>
<h4>最初の方法は、注釈を使用することです<br>
</h4>
<p>変換する必要があるフィールドに @JsonFormat 注釈を追加します。この注釈は jackson からのもので、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;

pattern: 変換する必要がある時刻と日付の形式

timezone: 変換時の時刻エラーを避けるために、時刻は東第 8 地区に設定されます

インターフェイスの呼び出し: http://localhost:8080/getUser

SpringBoot がジャクソンを使用して時間をフォーマットする方法

は完了しましたが、これには欠点もあります。すべてが日付型を持つエンティティが 100 個ある場合、それらは 100 個のエンティティに注釈が付けられている必要があります。ちょっと面倒そうです。

デフォルト構成を変更する 2 番目の方法

すべての json 生成は、関連する HttpMessageConverters から分離できません。

SpringBoot はデフォルトで jackson を使用し、デフォルトで構成します。それでは、変更してみましょう。

JacksonHttpMessageConvertersConfiguration のグローバル検索。アイデアのショートカット キー: Ctrl Shift r

SpringBoot がジャクソンを使用して時間をフォーマットする方法

このクラスには、json を処理するために使用されるメソッドmappingJackson2HttpMessageConverterがあります。

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

このメソッドには 2 つのアノテーションがあり、@Bean アノテーションは導入されないことに注意してください。 ConditionalOnMissingBean アノテーションを導入します。

@ConditionalOnMissingBean: 指定された Bean が存在しない場合、現在の Bean をインスタンス化します。

例: あなたが出勤するとき、会社はあなたがコンピュータを持ち込んでいることを認識し、あなたが自分のコンピュータを使用できるようにします。あなたがコンピュータを持っていない場合は、会社のコンピュータを使用させます。 。 SpringBoot も同じことを行います。これを指定しない場合は、デフォルトのものが使用されます。

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

MappingJackson2HttpMessageConverter の Bean を提供するため、Springboot は提供されたものを使用します。

User エンティティの注釈を付けます

SpringBoot がジャクソンを使用して時間をフォーマットする方法

インターフェイスを呼び出します: http://localhost:8080/getUser

SpringBoot がジャクソンを使用して時間をフォーマットする方法

OK、この方法も可能です。

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

SpringBoot がジャクソンを使用して時間をフォーマットする方法

注: 上記 2 つのメソッドはグローバルに変更されています。

3 番目の構成ファイルの変更

application.yml またはプロパティのデフォルト構成を変更します

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

2 番目の構成方法と 3 番目の構成方法が同時に存在する場合は、2 番目の方法が優先されます。

3 つのメソッドがすべて存在する場合、エンティティ クラスのアノテーション形式がメインになります。

以上がSpringBoot がジャクソンを使用して時間をフォーマットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。