[解決済み】Java 8 LocalDate ジャクソン形式
質問
について java.util.Date(ジャバユーティリティ・デイト をすると
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private Date dateOfBirth;
を送信すると、JSONリクエストで
{ {"dateOfBirth":"01/01/2000"} }
が動作します。
については、どのようにすればよいのでしょうか? Java 8のLocalDate のフィールドは?
を持つようにしてみました。
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate dateOfBirth;
うまくいかなかった。
どなたか、正しい方法を教えてください。
以下は依存関係です。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.3.10</version>
</dependency>
解決方法は?
アノテーションを使ってシンプルに動作させることはできませんでした。これを動作させるために、私は
ContextResolver
に対して
ObjectMapper
を追加し、次に
JSR310Module
(
update: 現在では
JavaTimeModule
代わりに
) と、もう1つの注意点、write-date-as-timestamp を false に設定する必要があること、でした。 詳しくは
JSR310モジュールのドキュメントです。
. 以下は、私が使った例です。
依存性
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
注
この際に直面した問題点として
jackson-annotation
が必要とする2.4を相殺するバージョン2.3.2が使用されました。
jsr310
. 何が起こったかというと、私は、以下のような NoClassDefFound を受け取りました。
ObjectIdResolver
これは 2.4 のクラスです。そこで、インクルードされている依存関係のバージョンを並べる必要がありました。
コンテクストリゾルバ
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper MAPPER;
public ObjectMapperContextResolver() {
MAPPER = new ObjectMapper();
// Now you should use JavaTimeModule instead
MAPPER.registerModule(new JSR310Module());
MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return MAPPER;
}
}
リソースクラス
@Path("person")
public class LocalDateResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getPerson() {
Person person = new Person();
person.birthDate = LocalDate.now();
return Response.ok(person).build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createPerson(Person person) {
return Response.ok(
DateTimeFormatter.ISO_DATE.format(person.birthDate)).build();
}
public static class Person {
public LocalDate birthDate;
}
}
テスト
curl -v http://localhost:8080/api/person
結果{"birthDate":"2015-03-01"}
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
結果2015-03-01
こちらもご覧ください こちら をクリックすると、JAXBソリューションが表示されます。
アップデイト
は
JSR310Module
は、Jackson のバージョン 2.7 以降、非推奨とされています。代わりに、モジュール
JavaTimeModule
. これは、同じ依存関係であることに変わりはありません。
関連
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Javaエラーメッセージがenclosingクラスでない
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] Jackson を使用してオブジェクトの配列をデシリアライズする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
SpringBootApplication を型解決できない。
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
自動配線された依存性のインジェクションに失敗しました。
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。