2

このリソースには既に同じ問題があります。しかし、答えは私にとっては完全に間違っているようで、うまくいきません。

なんて問題:

com.fasterxml.jackson.databind.JsonMappingException: タイプ ID 'MyRequest$GetAll' を [シンプル タイプ、クラス リクエスト] のサブタイプに解決できませんでした

私が持っていたもの:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyRequest.GetAll.class)})
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

私がやろうとしたこと:

私はそのアドバイスに従い、サブタイプの登録を注釈からJavaコードに移動しようとしました:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

public class Utils {
    private static final ObjectMapper mapper;

    static {
        mapper = new ObjectMapper();
        registerSubtypes();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
    } 

    private static registerSubtypes() { //REGISTER ALL SUBTYPES
      mapper.registerSubtypes(MyRequest.GetAll.class);
      //...
    }   
}

しかし、結果はありません。それでも例外が発生します。この状況で最も興味深いのは、ローカル マシンでは問題なく動作するが、デプロイ後には動作しないことです。

質問:

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

違いがあるかどうかはわかりませんが、@JsonTypeName単純なクラス名に頼るのではなく、明示的に名前を付けるためにサブタイプで使用することをお勧めします。これは保守がより安全であり、リファクタリングした場合 (たとえば、クラスを別のパッケージに移動する) に問題が発生する可能性が低くなります。

于 2013-12-04T21:07:52.553 に答える