web-dev-qa-db-ja.com

Spring Boot-カスタムJSONシリアル化

Jackson Libraryを使用するときは、通常、ミックスインを使用してカスタムシリアライゼーションとデシリアライゼーションを実行します。 Spring BootアプリのRestControllerには、以下のようなメソッドがあります。 Spring BootはJacksonを使用してVerifyAccountResponseを文字列にシリアル化していると思います。ただし、これは私のカレンダー/日付オブジェクトを文字列に変換するときに長い値に変換します。カスタムシリアライザーを使用して、適切な形式に変換できます。ただし、シリアル化後に戻り値の型をオブジェクトに変更する必要があります。同じ署名を保持し、Spring Bootによって実行されるデフォルトのシリアル化にカスタムシリアライザーを追加する方法はありますか?.

@RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<VerifyAccountResponse> verifyAccount(@RequestBody VerifyAccountRequest request) {

    VerifyAccountResponse response = service.verifyAccount(request);

    return new ResponseEntity<VerifyAccountResponse>(response, HttpStatus.OK);
}

編集:

Updated the below based on the answers , but mixin doesn't seem to take effect -

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.mixIn(ConnectStatus.class, com.datacast.service.util.DateFormatSerializerMixin.class);

    return builder;
}

編集2:

これをテストするために簡単なスプリングブートプロジェクトを作成しましたが、これは問題なく動作します。しかし、この方法を私の大きなプロジェクトで使用すると、日付の変換は行われません。 Jackson2ObjectMapperBuilderをオーバーライドするものはありますか?

5
Punter Vicky

SpringブートアプリケーションのJacksonシリアライザーは、さまざまな方法でカスタマイズできます。スプリングブートリファレンスガイドのジャクソンに関するドキュメントを確認することを検討してください:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/howto.html#howto-customize-the-jackson-objectmapper

Jackson2ObjectMapperBuilderを使用して、カスタムシリアライザーを構成できます。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.html#serializerByType-Java.lang.Class-com.fasterxml。 jackson.databind.JsonSerializer-

7
Lakatos Gyula

プロパティを設定することで、日付形式をカスタマイズできます(私はそれが投稿の主な理由であることを理解しています)。

spring.jackson.date-format= 
# Date format string or a fully-qualified date format class name.
For instance `yyyy-MM-dd HH:mm:ss`.
5
dmytro