Contenty类型的边界被FormHttpMessageConverter覆盖
我在Spring
Framework中使用FormHttpMessageConverter。为了通过restTemplate发送文件,我在项目中添加了FormHttpMessageConverter。
问题是服务器在哪里将文件询问的字符串加密为我的Content-type。我必须发送Content-type:multipart / form-
data的文件,但他们询问“ Content-type:multipart / form-data;”。和 。
因此,我尝试在发送文件之前为边界值。但是,当RestTemplate.exchage()时,边界值被覆盖,原因是FormHttpMessageConverter。FormHttpMessageConverter捕获了转换请求。如果Content-
type为multipart / form-data,则FormHttpMessageConverter将此代码覆盖边界值。
https://github.com/spring-projects/spring-
framework/blob/5f4d1a4628513ab34098fa3f92ba03aa20fc4204/spring-
web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java#L336
我找不到避免该问题的方法,因此我在链接处复制了该代码,并制作了一个文件“ xxxFormHttpMessageConverter”,并修改了“
writeMultipart”方法。
有人知道如何避免这种覆盖吗?
回答:
在Spring启动中,您可以通过创建新的HttpMessageConverter bean来自定义边界。Spring Boot将自动替换旧的靴子。代码如下:
@Configurationpublic class CustomerHttpMessageConverter {
public static final String MY_BOUNDARY = "XXXXXXXX";
@Bean
public HttpMessageConverter<MultiValueMap<String, ?>> createCustomerFormHttpMessageConverter() {
return new CustomerFormHttpMessageConverter();
}
static class CustomerFormHttpMessageConverter extends FormHttpMessageConverter {
@Override
protected byte[] generateMultipartBoundary() {
return MY_BOUNDARY.getBytes(Charset.forName("UTF-8"));
}
}
}
您可以在此处找到更多信息。
以上是 Contenty类型的边界被FormHttpMessageConverter覆盖 的全部内容, 来源链接: utcz.com/qa/404675.html