@RequestPart同时接收文件和json后端报错

在post请求中,使用@RequestPart注解同时接收文件和json类型的数据,报错 “Content type 'application/octet-stream' not supported”:

 "message": "Content type 'application/octet-stream' not supported"

本文介绍如何正确使用@RequestPart注解同时接收 文件 和 json 类型的数据。

1、问题描述

①Controller:
 @PostMapping(value = "/importV2")
    public Response<String> uploadAndImportRec(@RequestPart @NotNull MultipartFile multipartFile,
                                               @RequestPart RecImportRequest recImportRequest){       
        //上传文件
        String temp = rexManagementService.uploadRecFile(multipartFile);
        recImportRequest.setRecFileId(temp);
        //上传其他信息
        rexManagementService.createOfflineRec(recImportRequest);
        return new Response<>();
    }
②Postman测试:
Header信息

Body信息
③报错
报错信息

2、报错原因

参考这篇文章,发现报错原因是,未将原始json格式的数据转换为http能够识别的字符串流。

3、解决办法

自定义转换器,实现HttpMessageConverter,即json数据到http字符串流的转换。比较简单的做法是直接继承AbstractJackson2HttpMessageConverter。
代码如下:

@Component
public class MultipartJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {

    /**
     * Converter for support http request with header Content-Type: multipart/form-data
     */
    public MultipartJackson2HttpMessageConverter(ObjectMapper objectMapper) {
        super(objectMapper, MediaType.APPLICATION_OCTET_STREAM);
    }

    @Override
    public boolean canWrite(Class<?> clazz, MediaType mediaType) {
        return false;
    }

    @Override
    public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType) {
        return false;
    }

    @Override
    protected boolean canWrite(MediaType mediaType) {
        return false;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容