如何使用Spring Integration中的HTTP 204进行响应

时间:2017-06-27 09:32:57

标签: spring-integration dsl

我有一个系统使用spring集成来交换数据。 AppClient请求具有TableInfoRequest和AppServer的AppServer将响应TableInfoResponse.It现在工作正常。

    

    @MessagingGateway()
    public interface SyncGateway {

      @Gateway(requestChannel = "requestFlow.input")
      TableInfoResponse info(TableInfoRequest payload);

    }

但是,当没有数据响应时,我希望用http代码204进行响应,这将减少响应中的数据。那么如何设置DSL呢?


    @Bean
      public IntegrationFlow syncFlow() {
        return IntegrationFlows
            .from(
              Http.inboundGateway(HTTP_ENDPOINT_PATH).id("syncGateway")
                .replyTimeout(serverProps.getReplyTimeout() * 1000)
                .requestTimeout(serverProps.getRequestTimeout() * 1000)
                .messageConverters(new SerializingHttpMessageConverter())
                .convertExceptions(true)
                .mappedResponseHeaders(IDENTIFICATION, TOKEN))
            .channel(c -> c.direct("syncChannel")
                .interceptor(new ChannelAuthenticationInterceptor(dataService)))
            .handle(syncHandler)
            .get();
      }

syncHandler将返回TableInfoResponse.And AppClient使用 syncGateway.info(request)来获取tableInfoResponse。

2 个答案:

答案 0 :(得分:0)

在回复邮件中设置HttpHeaders.STATUS_CODE标题(http_statusCode)。

答案 1 :(得分:0)

只需使用:

 .statusCodeFunction(m -> HttpStatus.NO_CONTENT)

例如

@Bean
      public IntegrationFlow syncFlow() {
        return IntegrationFlows
            .from(
              Http.inboundGateway(HTTP_ENDPOINT_PATH).id("syncGateway")
                .replyTimeout(serverProps.getReplyTimeout() * 1000)
                .requestTimeout(serverProps.getRequestTimeout() * 1000)
                .statusCodeFunction(m -> HttpStatus.NO_CONTENT)
                .messageConverters(new SerializingHttpMessageConverter())
                .convertExceptions(true)
                .mappedResponseHeaders(IDENTIFICATION, TOKEN))
            .channel(c -> c.direct("syncChannel")
                .interceptor(new ChannelAuthenticationInterceptor(dataService)))
            .handle(syncHandler)
            .get();
      }