2

こんにちは、jackson を使用して、保護されたコンストラクターでクラス (SimpleExpression) をシリアル化および逆シリアル化しようとしています。gson を使用する場合、問題はありませんが、jackson は保護されたコンストラクターを処理できないようです。mixin-annotations を使用してみましたが、うまくいきませんでした。シリアル化は問題なく動作します。ジャクソンは次のように投げます。

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type

何か助けはありますか?私のコード:

private static SimpleExpression create(String json) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper().setVisibility(PropertyAccessor.ALL, Visibility.ANY);
    SimpleExpression sp = null;
    sp = mapper.readValue(json, SimpleExpression.class);
    return sp;
}

SimpleExpression クラス、getter と setter を省略しています。

public class SimpleExpression implements Criterion
{
private static final long serialVersionUID = 1L;

private final String propertyName;

private final Object value;

private boolean ignoreCase;

private final String op;

private final String type;

protected SimpleExpression(String propertyName, Object value, String op)
{
    this.propertyName = propertyName;
    this.value = value;
    this.op = op;
    this.type = value.getClass().getName();
}

protected SimpleExpression(String propertyName, Object value, String op, boolean ignoreCase)
{
    this.propertyName = propertyName;
    this.value = value;
    this.ignoreCase = ignoreCase;
    this.op = op;
    this.type = value.getClass().getName();
}
}
4

2 に答える 2

3

保護された部分は問題にならないはずですが (正常に検出されます)、おそらくコンストラクターが引数を取ります。@JsonCreator使用するデフォルト以外のコンストラクターを示すには、 ;を使用します。ただし、それ以上は、使用するコンストラクター (または静的ファクトリ メソッド) の種類によって異なります。

しかし、詳細を知るには、クラス定義が必要です。別の可能性として、非静的内部クラスを処理しようとしている可能性があります。

于 2012-04-25T21:13:50.053 に答える