ホームページ >Java >&#&チュートリアル >SpringBoot がジャクソンを使用して時間をフォーマットする方法
プロジェクトを作成し、依存関係を追加します
<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
は完了しましたが、これには欠点もあります。すべてが日付型を持つエンティティが 100 個ある場合、それらは 100 個のエンティティに注釈が付けられている必要があります。ちょっと面倒そうです。
すべての json 生成は、関連する HttpMessageConverters から分離できません。
SpringBoot はデフォルトで jackson を使用し、デフォルトで構成します。それでは、変更してみましょう。
JacksonHttpMessageConvertersConfiguration のグローバル検索。アイデアのショートカット キー: Ctrl Shift r
このクラスには、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 エンティティの注釈を付けます
インターフェイスを呼び出します: http://localhost:8080/getUser
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
注: 上記 2 つのメソッドはグローバルに変更されています。
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 サイトの他の関連記事を参照してください。