带有Spring和Jackson的REST完整数据绑定

我正在使用Spring MVC处理JSON POST请求。在幕后,我使用的是在Jackson JSON处理器上构建的MappingJacksonHttpMessageConverter,并在使用mvc:annotation驱动时启用了该功能。

我的一项服务收到了一系列操作:

@RequestMapping(value="/executeActions", method=RequestMethod.POST)

public @ResponseBody String executeActions(@RequestBody List<ActionImpl> actions) {

logger.info("executeActions");

return "ACK";

}

我发现杰克逊将requestBody映射到java.util.LinkedHashMap项列表(简单数据绑定)。相反,我希望将请求绑定到类型对象列表(在本例中为“ ActionImpl”)。

我知道,如果直接使用Jackson的ObjectMapper,这很容易做到:

List<ActionImpl> result = mapper.readValue(src, new TypeReference<List<ActionImpl>>() { }); 

但是我想知道使用Spring MVC和MappingJacksonHttpMessageConverter时实现此目标的最佳方法是什么。有什么提示吗?

谢谢

回答:

我怀疑问题是由于类型擦除引起的,不是传递通用参数类型,而是仅传递actions.getClass();这将提供与List <?>等效的类型。

如果是这样,一种可能性是使用中间子类,例如:

public class ActionImplList extends ArrayList<ActionImpl> { }

因为即使只传递了类,这也会保留类型信息。因此:

public @ResponseBody String executeActions(@RequestBody ActionImplList actions)

会成功的 不是最佳,但应该可以。

我希望有更多Spring MVC知识的人可以阐明为什么不传递参数类型(也许是错误?),但是至少可以解决此问题。

以上是 带有Spring和Jackson的REST完整数据绑定 的全部内容, 来源链接: utcz.com/qa/401406.html

回到顶部