ホームページ >Java >&#&チュートリアル >Java 8 で Jackson を使用して LocalDate をフォーマットするにはどうすればよいですか?

Java 8 で Jackson を使用して LocalDate をフォーマットするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-11 04:39:121009ブラウズ

How Can I Format LocalDate with Jackson in Java 8?

Java 8 で Jackson を使用した LocalDate の書式設定

java.util.Date を処理する場合、@JsonFormat アノテーションは便利な書式設定を提供します。ただし、Java 8 の LocalDate フィールドの場合、カスタム シリアライザーとデシリアライザーを使用するだけでは不十分な場合があります。

目的の書式設定を実現するには、より包括的なアプローチをお勧めします。 Jackson JSR310Module を導入すると、追加の機能が利用できるようになります。

依存関係

まず、Jackson 依存関係を追加します。

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.4.0</version>
</dependency>
注:含まれる依存関係のバージョンは、潜在的なクラス解決を回避するために調整されます。

ContextResolver

次に、ObjectMapper の ContextResolver を定義します。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
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();
        MAPPER.registerModule(new JavaTimeModule());
        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return MAPPER;
    }  
}

リソース クラス

リソース クラスで、 ObjectMapperContextResolver:

@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

結論

JSR310Module、ObjectMapperContextResolver を使用し、SerializationFeature.WRITE_DATES_AS_TIMESTAMPS を設定することによりにfalse の場合、Java 8 の LocalDate は Jackson を使用して効果的にフォーマットできます。

以上がJava 8 で Jackson を使用して LocalDate をフォーマットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。