问题:Spring 默认的 Jackson 转换器可能会错误地尝试将文件部分(application/octet-stream)当作 JSON 解析,导致异常。
解决方案:
@Component
public class MultipartJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {
protected MultipartJackson2HttpMessageConverter(ObjectMapper objectMapper) {
// MediaType.APPLICATION_OCTET_STREAM 表示这个转换器用于处理二进制流数据,通常用于文件上传。
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;
}
}
MultipartJackson2HttpMessageConverter的作用:
1:防止spring默认的Jackson转换器错误解析二进制文件数据
2:明确区分二进制流和json数据