Spring integration 我怎样才能揭发这一“事实”;“内容处置”;春季集成(DSL)?

Spring integration 我怎样才能揭发这一“事实”;“内容处置”;春季集成(DSL)?,spring-integration,spring-integration-dsl,spring-integration-http,Spring Integration,Spring Integration Dsl,Spring Integration Http,下载文件时,我会将“内容配置”添加到我的responseHeader中,但它不起作用 响应将不具有任何附加属性 @Bean public ExpressionParser fileParser() { return new SpelExpressionParser(); } @Bean public HeaderMapper<HttpHeaders> fileHeaderMapper() { return ne

下载文件时,我会将“内容配置”添加到我的responseHeader中,但它不起作用

响应将不具有任何附加属性

    @Bean
    public ExpressionParser fileParser() {
        return new SpelExpressionParser();
    }

    @Bean
    public HeaderMapper<HttpHeaders> fileHeaderMapper() {
        return new DefaultHttpHeaderMapper();
    }
@Bean
public ExpressionParser fileParser(){
返回新的SpelExpressionParser();
}
@豆子
公共HeaderMapper文件HeaderMapper(){
返回新的DefaultHttpHeaderMapper();
}
@Bean
公共集成流httpGetFileDownload(){
返回IntegrationFlows.from(
Http.inboundGateway(“/api/files/download/{id}”)
.requestMapping(r->r.methods(HttpMethod.GET))
.statusCodeExpression(fileParser().parseExpression(“T(org.springframework.http.HttpStatus).BAD_请求”))
.payloadExpression(fileParser().parseExpression(“#pathVariables.id”))
.crossOrigin(cors->cors.origin(“*”).exposedHeaders(“内容处置”,“内容处置”))
.headerMapper(fileHeaderMapper())
)
.channel(“http.file.download.channel”)
.handle(“文件端点”、“下载”)
.get();
}
公共消息下载(消息消息消息){
...
返回消息生成器
.withPayload(资源)
.copyHeaders(msg.getHeaders())
.setHeader(状态代码\头,HttpStatus.OK)
.setHeader(HttpHeaders.CONTENT_处置,“附件;文件名=“+file.getName())
.setHeader(HttpHeaders.CONTENT_类型,mimeType)
.setHeader(HttpHeaders.CONTENT_LENGTH,(int)file.LENGTH())
.build();
}
我得到的是:

缓存控制:“无缓存,无存储,最大年龄=0,必须重新验证”
内容类型:“应用程序/json”
过期:“0”

pragma:“无缓存”

默认情况下,
DefaultHttpHeaderMapper
是空的。我认为现在可能是将ctor设置为不推荐使用的时候了,不允许从最终应用程序使用它。 或者进行一些验证以拒绝空的(未配置)
DefaultHttpHeaderMapper

使用
返回新的DefaultHttpHeaderMapper()还有一点让人困惑如果您没有自定义它。HttpRequestHandlingMessagingGateway中有一个默认值:

private HeaderMapper<HttpHeaders> headerMapper = DefaultHttpHeaderMapper.inboundMapper();

setupDefaultInboundMapper()
非常重要:它为我们带来了一组从请求映射到响应的头。

HI Ryan您是否尝试使用ContentDisposition.builder()?否。我应该在哪里绑定此方法?在我的处理程序中?要创建不起作用的HttpHeaders.CONTENT\u处理,您的
fileHeaderMapper
是什么?
DefaultHttpHeaderMapper
HttpHeaders.CONTENT\u DISPOSITION
映射到HTTP响应中。所以,我们需要知道你的那个是做什么的。另一方面,如果您有一些简单的项目与我们共享以进行调试,那将是非常棒的。
private HeaderMapper<HttpHeaders> headerMapper = DefaultHttpHeaderMapper.inboundMapper();
/**
 * Factory method for creating a basic inbound mapper instance.
 * This will map all standard HTTP request headers when receiving an HTTP request,
 * and it will map all standard HTTP response headers when sending an HTTP response.
 * @return The default inbound mapper.
 */
public static DefaultHttpHeaderMapper inboundMapper() {
    DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
    setupDefaultInboundMapper(mapper);
    return mapper;
}