下载文件时,我会将“内容配置”添加到我的responseHeader中,但它不起作用。
响应不会有任何添加的属性。
@Bean
public ExpressionParser fileParser() {
return new SpelExpressionParser();
}
@Bean
public HeaderMapper<HttpHeaders> fileHeaderMapper() {
return new DefaultHttpHeaderMapper();
}
@Bean
public IntegrationFlow httpGetFileDownload() {
return IntegrationFlows.from(
Http.inboundGateway("/api/files/download/{id}")
.requestMapping(r -> r.methods(HttpMethod.GET))
.statusCodeExpression(fileParser().parseExpression("T(org.springframework.http.HttpStatus).BAD_REQUEST"))
.payloadExpression(fileParser().parseExpression("#pathVariables.id"))
.crossOrigin(cors -> cors.origin("*").exposedHeaders("Content-Disposition", "content-disposition"))
.headerMapper(fileHeaderMapper())
)
.channel("http.file.download.channel")
.handle("fileEndpoint", "download")
.get();
}
public Message<?> download(Message<Long> msg){
...
return MessageBuilder
.withPayload(resource)
.copyHeaders(msg.getHeaders())
.setHeader(STATUSCODE_HEADER, HttpStatus.OK)
.setHeader(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename=" + file.getName())
.setHeader(HttpHeaders.CONTENT_TYPE, mimeType)
.setHeader(HttpHeaders.CONTENT_LENGTH, (int)file.length())
.build();
}
我得到的:
cache-control:"no-cache, no-store, max-age=0, oble-revaltify"
content-type:"Application/json"
过期:"0"
pragma:"no-cache"
您的问题是DefaultHttpHeaderMapper
默认为空。我认为可能是时候将ctor设为已弃用
以不允许从最终应用程序使用它。或者进行一些验证以拒绝只是空的(未配置)DefaultHttpHeaderMapper
...
同样令人困惑的是,使用返回新的DefaultHttpHeaderMapper()有什么意义 如果您没有自定义它。HttpRequestHandlingMessagingGateway中有一个默认值:
private HeaderMapper<HttpHeaders> headerMapper = DefaultHttpHeaderMapper.inboundMapper();
为了解决您的问题,您肯定需要使用这个inboundMapper()
factory方法,它可以实现以下功能:
/**
* 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;
}
setupDefaultInboundMapper()非常重要:它为我们带来了一组从请求映射到响应的头。
如何在下面的JUnit类中运行integrationFlow?目前出现了例外情况 因为整合流没有启动。 JUnit类: }
我无法解决这个问题,现在已经坚持了很长时间。我是一个spring-integration-dsl的初学者,任何帮助都将非常感谢。
我正在使用Spring Boot(打包到没有SpringBoot运行程序的经典WAR),我想在Spock中实现集成测试。当我使用时,只使用标准Spring上下文(没有从Boot获得任何好处,例如。
我已经建立了一个简单的Spring集成流程,该流程由以下步骤组成: 然后定期轮询一个rest api 对有效载荷做一些处理 并将其置于Kafka主题上。 请遵守以下代码: 这非常有效,然而,我正在努力想出一些好的测试。 我应该如何模拟外部RESTAPI
使用石英2.2.2 Spring 4.2.4.释放 如何给我配置石英?,只用阳极化全部 启动我的系统好吗 问题包含2 jobFactory for system public SchedulerFactoryBean SchedulerFactoryBean()方法的第一个构建是另一个类的第二个构建,我想是Spring! 我的Quartz配置属性是: 我尝试使用和bean“springQuartz
我有一个要求,我需要保存/缓冲在通道上接收到的消息,并根据消息数量或超时意味着1分钟内没有接收到消息而持久化在数据库中。有没有办法在Spring集成中实现这一点