这是一个Spring集成(基于Spring Boot)项目,我已经配置了Spring集成应用程序,如下所示,
配置xml:
<int:channel id="httpChannel"/>
<int-http:inbound-gateway supported-methods="GET,POST" request-channel="httpChannel" reply-channel="outputChannel" path="/"
message-converters="converter"
/>
<bean id="converter" class="in.tc.springintegrationdemo.CustomConverter" />
<int:transformer ref="customTransformer" input-channel="httpChannel" output-channel="outputChannel" />
<bean id="customTransformer" class="in.tc.springintegrationdemo.MultipartTransformer" />
<bean class="in.tc.springintegrationdemo.MessageUpdateBean" id="printMessage"/>
<int:service-activator ref="printMessage" method="print" input-channel="outputChannel">
</int:service-activator>
CustomConverter定义如下
public class CustomConverter implements HttpMessageConverter<MultiValueMap<String,?>> {
@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
...
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return false;
}
@Override
public List<MediaType> getSupportedMediaTypes() {
return Collections.singletonList(MediaType.MULTIPART_FORM_DATA);
}
@Override
public MultiValueMap<String,?> read(Class<? extends MultiValueMap<String,?>> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
MultiValueMap<String, ?> result = new LinkedMultiValueMap<>();
String str = "";
MediaType contentType = inputMessage.getHeaders().getContentType();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputMessage.getBody(), contentType.getCharset()));
while((str=bufferedReader.readLine())!=null) {
//code to retrieve multipart data
}
return result;
}
@Override
public void write(MultiValueMap<String,?> t, MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
throw new UnsupportedOperationException();
}
对于多部分/表单数据,我在CustomConverter类中总是得到一个空白负载。
我还尝试添加一个多部分解析器,如下所示
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> but it has the same result.
我在stackoverflow Spring Integrdsl上关注了一个类似的问题——HTTP入站网关使用multipart/form-data。但对我来说它不起作用。
多部分/表单数据负载
POST / HTTP/1.1
User-Agent: PostmanRuntime/7.26.8
Accept: */*
Postman-Token: d24d89ef-c52b-492a-96b9-6ef6807e8d1a
Host: localhost:9090
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------865732735860935509694157
Content-Length: 217
----------------------------865732735860935509694157
Content-Disposition: form-data; name=""; filename="testfile.txt"
Content-Type: text/plain
testcontent
----------------------------865732735860935509694157--
期待您的光临。
我认为您需要抛弃您的定制转换器,转而使用现有的现成的多部件formhttpmessageconverter,它在任何
既然你说你用的是Spring Boot,那么你就不需要用multipartResolver做任何事情了-它是在MultipartAutoConfiguration中为我们自动配置的。
如果这对你仍然不起作用,我很乐意研究一下你的项目的一个简单而简短的版本,可以使用、复制和可能的修复。
不相关:任何理解为什么使用XML配置的机会,但不是Java
我想通过超文本传输协议使用multipart/form-data inboud网关。第一部分是json对象,我想按内容类型将其序列化为对象:应用程序/json。第二部分是pdf文件。是否可以简单地序列化?我需要我的自定义消息转换器吗? 原始请求: HTTP Inboud网关 编辑: 我已经在Spring启动2.0.3上尝试过了。释放。它似乎不适用于。在有效负载中,我总是看到空的LinkedMult
我尝试使用以下代码,得到了回应:状态:405方法不允许。这是我的Http请求:http://localhost:8090/services/test?name=test.代码或http请求有什么问题?
我不熟悉Spring集成。我正在尝试使用http入站网关构建一个简单的应用程序。下面是我得到的运行时异常。 下面是代码文件。 波约 服务 } 服务激活器 } 存储库 请帮助我,我正在试图找到异常发生的原因,但无法解决。提前谢谢。 集成文件。
我有一个http出站网关,它将json消息发布到rest服务,现在rest将以json消息类型的http错误状态响应,以防我们的应用程序捕获任何错误。在将json消息发布到rest服务并获得http成功状态的愉快场景中,我们的应用程序也应该捕获json消息。 现在我通过Spring集成实现了什么,我能够发送消息并获得成功响应并捕获它,但在错误状态下Spring行为会抛出异常,我如何更改行为? 如果
我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情: 我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示: 其中MessageReceiverHandler()是扩展AbstractMessageHandler的bean。 所以上面我们有一个用于出站消息的消息网关。我假设我们也应该有一个用于入站消息的网关,允许我们将传入消息处理与应
我遇到了一个问题,我无法在我的资源中获取我的表单,变量总是为空 我的资源: 表单模型 我的取货请求: 和我的HttpClient: 为了确保我正在使用代理进行测试并且请求实际上是好的:变量文件名和徽标始终为空。 这是我的绒球.xml: 我不知道问题出在哪里。 我已经看过了多部分的官方resteasy文档,看不出问题在哪里。我已经用MultipartFormDataInput测试过,所有部分都是空的