Spring設定jackson変換Date、LocalDateTime
6347 ワード
業務需要:先端の対象に伝わるLocalDateTimeをタイムスタンプに変えます.(JDKはすでに8に昇格したので、LocalDateTimeを全面的に使う)
一部の注釈を通じて
指定した日付書式属性フィールドにコメントを追加します.
書式設定、 この注釈はSpringによって提供される.
@DateTimeFormat(pattern= "yyyy-MM-dd HH:mm:ss")
フォーマットに参加して、この注釈はjackson(jackson-annotations)から提供して、timezoneは持って行きます.さもなくば表示のは0時区の時間です. @JsonFormat( pattern= "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ガチョウは本プロジェクトの後期にこの需要を処理しますので、一つ一つ追加するのがおっくうです.しかも、注釈が多すぎて、読書に影響します.
二、グローバル設定
1.Dateを変換する
a.Dateがタイムスタンプに変わります.
ジャックソンが配置されていますが、デフォルトではDateをタイムスタンプに変えます.
b.Dateを指定されたフォーマットに変換する時間サブストリング
XMLには以下のように配置されています.対応するdateFormatを指定すればいいです.
2.LocalDateTimeを変換するここでLocalDateTimeをタイムスタンプにする方法を記録します.毎回検索しなくてもいいです.
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
long millis = instant.toEpochMilli();
jacksonでLocal DateTimeを変換するには、カバンを入れなければなりません.
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.9.8
object Mapperの設定 @Bean
@Primary
public ObjectMapper jacksonObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// mapper ,
// Include.Include.ALWAYS
// Include.NON_DEFAULT
// Include.NON_EMPTY ("") NULL , json 。
// Include.NON_NULL NULL , null
// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// , null ""
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer
このうちLocal DateTimeToLongSerializerコードは以下の通りです.import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class LocalDateTimeToLongSerializer extends JsonSerializer {
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
long millis = instant.toEpochMilli();
jsonGenerator.writeNumber(millis);
}
}
そして設定 MappingJackson 2 Http Message Coverter
application/json;charset=UTF-8
本来なら大丈夫です.ただし、ガチョウはプロジェクトには効果がありません.資料を二時間探しています.うかつでもあります.中には問題を解決できるような書き込みがありますが、詳しく見ていません.主にこの方面を考慮していませんでした.(もっと怪しい問題なら、もっと簡単です.).この記事を見るまでは. SpringMVCはJava 8時間JSONデータのフォーマット問題を解決します. .下記のコードの優先度は上記のコードより高いと記載されています.
application/json;charset=UTF-8
これで問題を解決します.しかし、後者の優先度が低いとしても、なぜ無効になりますか?
参考:
1. @DateTimeFormatと@Json Format注释
2.JsonのMappingJackson 2 HttpMessage Coverterの使い方を解析する
3.spring boot LocalDateTimeなどjava 8時間類の序列化と反序列化のサポートを追加します.
4.Java 8 Local DateTimeタイムスタンプ
5. SpringMVC@ResponseBodyを使用すると、Jsonの日付フォーマットに戻ります.@DatetimeFormatはご注意ください.
以上の作者に感謝します.