@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 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;
    }
}

你可能感兴趣的:(@RequestPart同时接收文件和json后端报错)