如何在使用. getclass()时将参数传递给构造函数



我有那行代码,它在那个版本下工作:

...
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]

我如何发送参数到一个对象,我将得到它的类的值?

Wrapper.classnew Wrapper().getClass()new Wrapper(theParam).getClass()返回相同的值:Wrapper.class。所有这一切,如果你有合适的构造函数,即,构造函数能够获得参数theParam。在您的例子中,类Wrapper没有接受Class类型参数的构造函数,因此它会报错。

我认为您需要的是指明Jackson要使用的包装器的一般类型。有两种方法可以做到这一点:

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

我不确定如何typerreference或JavaType(这是泛型支持的替代传递类实例(类型擦除,即没有泛型!))通过Spring框架,但我认为它应该是可能的。

或者,如果不能工作,尝试子类包装器——具体的子类实际上有必要的信息:

公共类ModelWrapper扩展Wrapper {}ModelWrapper包装= restTemplate。getForObject (BASE_URL ModelWrapper.class);

相关内容

  • 没有找到相关文章

最新更新