带有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