4

com.google.common.base.Optional の Json シリアライザー/デシリアライザーはありますか?

そのままでは、これは Jackson では機能しないようです。以下を参照してください。

package com.example;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import com.google.common.base.Optional;

public class TestClass {

public Optional<String> myString;

public TestClass() {
    myString = Optional.of("testString");
}

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
    TestClass testClass = new TestClass();
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = objectMapper.writeValueAsString(testClass);
    System.out.println(jsonString);
}

}

-> {"myString":{"present":true}}

4

3 に答える 3

12

実際、GitHub には Jackson 用のGuava モジュールがありますが、Optional は (まだ) サポートされていません。実装するのはかなり単純なシリアライザー/デシリアライザーのようです。動作は @JsonUnwrapped とかなり似ているはずなので、簡単なテストの結果は次のようになります。

{"myString":"testString"}

Optional.absent の場合、シリアル化されたフォームは次のようになります。

{"myString":null}

更新: 十分に単純に思えたので、実装して GitHub にプッシュしました。公式リポジトリから入手してソースからビルドするか、次の公式リリースを待つことができます。楽しみ!

于 2012-05-25T13:33:15.680 に答える
3

ここには Guava Jackson シリアライザー/デシリアライザーを含むライブラリがあります。しかし、誰もいませんoptional。しかし、これは非常に基本的なクラスであり、そこにあるサンプルに従って自分で簡単に作成できます。次に、Tatu にコードを渡して、Tatuがライブラリに追加できるようにします。

于 2012-05-23T23:08:39.217 に答える
0

私は同じ問題を抱えており、JsonSerializer と JsonDeserializerを JSON で Option<> クラス (機能的な Java) をシリアル化/逆シリアル化する方法として使用して問題を解決しましたか? . お役に立てれば。

于 2014-04-09T12:33:43.377 に答える