首页 > 解决方案 > 在 RestAPI Post 请求中映射为参数

问题描述

我创建了一个带有Map<String, Integer>参数的 API,如下所示:

@RequestMapping(value = "upload", method = RequestMethod.POST)
public ResponseEntity<String> handleContactsFileUpload(@RequestParam("file") MultipartFile file,
                                                       @RequestParam("name") String name,
                                                       @RequestParam("campaignAppItemId") Long campaignAppItemId,
                                                       @RequestParam("fileColumnHeaders") Map<String,Integer> fileColumnHeaders) throws Exception {
    if (file == null)
        return new ResponseEntity<>("No file uploaded", HttpStatus.BAD_REQUEST);
    contactService.handleContactsFile(file, name, campaignAppItemId,fileColumnHeaders);
    return new ResponseEntity<>("File uploaded successfully", HttpStatus.OK);
}

我正在尝试通过 Postman 调用它:

我在屏幕截图中传递了fileColumnHeaders内部 Body->Form Data。

然后我在 Postman 中收到这样的消息:

无法将“java.lang.String”类型的值转换为所需的“java.util.Map”类型;嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为所需类型“java.util.Map”:找不到匹配的编辑器或转换策略。

有人知道为什么会出现这条消息吗?我们如何在 Rest API 请求中将地图作为参数传递?我们如何通过 Postman 传递地图?

标签: javaspringspring-bootspring-mvcpostman

解决方案


您可以使用@RequestBody而不是@RequestParamMaps 和其他重要的数据类型和对象 - 这样 spring 会将表示您的 map 参数的 JSON 映射到域对象,然后可以序列化并可以转换为 java 对象。


推荐阅读