2017-06-13 19 views
1

だからこそ、これは難しいことではありません。私は、java.time.LocalDateTimeをデシリアライズして、ジャージクライアントアプリケーションのObjectMapperを取得しようとしています。Jerseyクライアントをモジュールで初期化する適切な方法は何ですか?

Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.LocalDateTime: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 

わかりましたので、Javaタイムタイプに適切なシリアライザ/デシリアライザを実装モジュールがあります::悲しいことに、これは例外になりcom.fasterxml.jackson.datatype.jsr310.JavaTimeModuleが。偉大なので、アプリケーションにそのモジュールをインストールするだけで、すべてがうまくいきます。しかし、どのように?

ドキュメントは、これについては何も言いません。私は運で、初期化コードの次の行のすべての賢明な組み合わせを試してみた:上記

ClientBuilder builder = ClientBuilder.newBuilder(); 
    builder.register(new RequestFilter(this)); 
    builder.register(new ResponseFilter(this)); 

    builder.register(new JacksonJsonProvider(objectMapper)); 
    builder.register(new JavaTimeModule()); 

    ClientConfig cc = new ClientConfig(); 
    cc.register(new JacksonJsonProvider(objectMapper)); 
    cc.register(new JavaTimeModule()); 
    // cc.getClasses().add(JavaTimeModule.class); // no go, this collection is unmodifiable 

    builder.register(cc); 

    // Client client = builder.build(); 
    Client client = builder.withConfig(cc).build(); 

    client.register(new JacksonJsonProvider(objectMapper)); 
    client.register(new JavaTimeModule()); 
    //client.getConfiguration().getClasses().add(JavaTimeModule.class); // and this one too. 

ObjectMapperは、(クライアントの外での使用のために)自分のアプリケーションの誰に転がった別の一つであり、

objectMapper = new ObjectMapper(); 
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 
    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
    objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); 
    objectMapper.registerModule(new JavaTimeModule()); 

LocalDateTimeもマップできません。

したがって、そのモジュールを使用するようにJerseyクライアントを設定し、java.time.LocalDateTimeをデシリアライズする適切な方法は何ですか?

答えて

0

は ヴァル・マッパー= ObjectMapper() mapper.registerModule(JavaTimeModule())

val provider = JacksonJaxbJsonProvider() 
provider.setMapper(mapper) 

val clientConfig = ClientConfig() 
clientConfig.register(provider) 

( - あなたが期待されているJavaに変換kotlinための謝罪を)試してみてください。

関連する問題