Spring Boot では、通常、Jackson を使用して Java オブジェクトを JSON にシリアル化および逆シリアル化します。日付のシリアル化を行うときは、日付形式を指定する必要があります。指定しないと、Jackson はデフォルトの形式を使用するため、これが私たちが望んでいる形式ではない可能性があります。日付形式を指定するには、次の 2 つの方法があります:
何も処理しない場合、デフォルトの結果は次のようになります: したがって、何らかの手段で日付を処理する必要があります。 it.
@JsonFormat() をエンティティ クラスの日付属性に追加し、パラメータパターン 希望する形式の例は次のとおりです。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;
この時点で、フロントエンドは設定した形式に従って表示されます
上記の場合フロントエンドに表示される日付に @JSONFormat アノテーションを付けるのが非常に面倒なので、方法 2 グローバル例外処理を使用する
最初に、Jackson パッケージの ObjectMapper を紹介します。
ObjectMapper は、Jackson ライブラリのクラスです。その主な機能は次のとおりです:
Java オブジェクトを JSON にシリアル化する/XML など 形式;
JSON/XML およびその他の形式のデータを Java オブジェクトに逆シリアル化します。
つまり、オブジェクトを JSON/XML に変換することが鍵となります。
次に、このクラスでできることは、
(1) コンストラクターでの日付変換の形式をカスタマイズする ----属性を変更するのと同じです。初期化値。
(2) 呼び出し時に Jackson のカスタム ObjectMapper を呼び出さないように SpringMVC を構成し、カスタム形式を使用します
##これらの 2 つのステップで実装します。 1:ObjectMapper を継承し、コンストラクターをオーバーライドし、シリアル化メソッドをカスタマイズします。
public class JacksonObjectMapper extends ObjectMapper { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; public JacksonObjectMapper() { super(); //收到未知属性时不报异常 this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); //反序列化时,属性不存在的兼容处理 this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); SimpleModule simpleModule = new SimpleModule() .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); //注册功能模块 例如,可以添加自定义序列化器和反序列化器 this.registerModule(simpleModule); } }
ステップ 2: Spring にカスタム メッセージ コンバーターを使用させます
ここで、次のことを行う必要があります。考えてみてください、どのように対処すればよいでしょうか? どこに設定するのですか? 設定ファイル? 設定クラス? まず最初に考えられるのは、システムに不可欠なものはインターセプタであり、インターセプターにはインターセプト ルールを構成するための構成クラスがありますか? それで、ここで構成できますか?
binggo, right here. インターセプターの構成クラスを構成すると、WebMvcConfigurationSupport クラスに多くのメソッドがあることがわかります。 ,
一般的に使用される
protected void addInterceptors(InterceptorRegistry registry) { ... }インターセプト ルールの構成
public void addResourceHandlers(ResourceHandlerRegistry registry) {。 .. }
リソース処理を構成するための構成方法は多数あります
など。メッセージ コンバーター
もその 1 つです
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {...}
関連情報を構成することでこのメソッドでは、Spring によってデフォルトで指定されているルールを変更し、独自に定義したルール (コンポーネント) を使用できます。 コードは次のとおりです。
@Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("扩展消息转换器..."); //创建一个消息转换器对象,注意不要导错包是Jackson2Http MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据 converter.setObjectMapper(new JacksonObjectMapper()); //将自己的消息转化器加入容器中 converters.add(0, converter); }
Created a MappingJackson2HttpMessageConverter は、Spring MVC に統合された Jackson メッセージ コンバータであり、Java オブジェクトを JSON にシリアル化/逆シリアル化できます。
メッセージ コンバーターに JacksonObjectMapper の使用を指定します。これは、Java オブジェクトを JSON にシリアル化/逆シリアル化するために使用されます。
JacksonObjectMapper()
を使用してオブジェクトと JSON 間のシリアル化と逆シリアル化を処理します。したがって、システム内のすべての日付は、必要な形式に従ってシリアル化されます。
日付が記載されているため、同様の機密情報の処理もあります。
フロントエンド データを返すとき、フロントエンドに見せたくない場合があります。エンティティ クラスの設計により、データ。このとき、何らかの手段、または 2 つの方法でデータを処理する必要があります。
データの値を置き換える前に戻り、set メソッドを呼び出して
スパム情報に設定します。setPassword(“******”)
は、Jackson によって提供されます。エンティティ クラス @JsonIgnore
アノテーションも使用できます。 解決策は、フィールドのシリアル化と逆シリアル化を無視することです。
以上がSpringBoot で日付を処理するにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。