我最近在使用SpringMVC和Jackson时遇到了同样的问题!
在Spring中,当您将端点显式配置为仅使用application/x-www-form-urlencoded
请求时,Spring可以序列化到POJO类中,但是它不使用Jackson,因为它不是JSON。
因此,为了使这些Jackson注释可以使用POJO进行工作,您必须:
以地图的形式获取数据 用Jackson的ObjectMapper解析数据映射 就我而言,使用Spring我可以使用以下代码解决此问题:
@RequestMapping(
value = "/rest/sth",
method = RequestMethod.POST
)
public ResponseEntity<String> create(@RequestBody MultiValueMap paramMap) { ... }
当您从@RequestMapping注释中删除“ consumes”属性时,您必须使用该属性,@RequestBody否则Spring将无法将您的地图识别为有效参数。
您可能会注意到的一件事是,MultiValueMap它不是常规地图。每个元素值都是一个LinkedList字母,因为http表单数据可以重复值,因此这些值将被添加到该链接列表中。
考虑到这一点,下面是一个简单的代码来获取第一个元素并创建另一个映射以转换为您的POJO:
HashMap<String, Object> newMap = new HashMap<>();
Arrays.asList(new String[]{"my_name", "my_phone"})
.forEach( k -> newMap.put(k, ((List<?>) paramMap.get(k)).get(0)));
MyRequest myrequest = new ObjectMapper().convertValue(newMap, MyRequest.class);