0

そのコード行があり、そのバージョンで動作していました:

...
Wrapper<Model> wrapped = restTemplate.getForObject(BASE_URL, Wrapper.class, map);
...

ただし、パラメーターをコンストラクターに送信したい:

...
Wrapper<Model> wrapped = restTemplate.getForObject(BASE_URL, new Wrapper(Model.class).getClass(), map);
...

それは私に例外をスローします:

org.springframework.web.client.ResourceAccessException: I/O error: No suitable constructor found for type [simple type, class a.b.c.d.model.Wrapper]: can not instantiate from JSON object (need to add/enable type information?)
 at [Source: org.apache.commons.httpclient.AutoCloseInputStream@ef9e8eb; line: 1, column: 3]; nested exception is org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class a.b.c.d.model.Wrapper]: can not instantiate from JSON object (need to add/enable type information?)
 at [Source: org.apache.commons.httpclient.AutoCloseInputStream@ef9e8eb; line: 1, column: 3]

値のクラスを取得するオブジェクトにパラメーターを送信するにはどうすればよいですか?

4

2 に答える 2

1

Wrapper.classそして、同じ値new Wrapper().getClass()を返します: 。これはすべて、適切なコンストラクター、つまり引数を取得できるコンストラクターがある場合です。あなたの場合、クラスには型の引数を受け入れるコンストラクターがないので、これについて文句を言います。new Wrapper(theParam).getClass()Wrapper.classtheParamWrapperClass

于 2011-11-15T09:28:23.670 に答える
0

必要なのは、Jacksonが使用するWrapperのジェネリックタイプを示すことだと思います。これを行うには、いくつかの方法があります。

Wrapper<Model> value = objectMapper.readValue(source, new TypeReference<Wrapper<Model>>() { });
Wrapper<Model> value = objectMapper.readValue(source, objectMapper.getTypeFactory().constructParametricType(Wrapper.class, Model.class);

TypeReferenceまたはJavaType(これらは、クラスインスタンス(型が消去されている、つまりジェネリックがない!)を渡すためのジェネリック対応の代替手段)のいずれかがSpringフレームワークを介してどのように行われるかはわかりませんが、可能であると思います。

または、それが機能しない場合は、ラッパーのサブクラス化を試してください。具体的なサブクラスには、実際に必要な情報が含まれています。

public class ModelWrapper extends Wrapper {} ModelWrapperwrapped = restTemplate.getForObject(BASE_URL、ModelWrapper.class);

于 2011-11-15T16:38:24.203 に答える