Java 如何更改Spring集成网关元素中默认回复超时属性的空值?

Java 如何更改Spring集成网关元素中默认回复超时属性的空值?,java,spring-integration,Java,Spring Integration,我有一个如下定义的网关: <int:gateway service-interface="com.charter.egateway.integration.accountbase.AccountBaseSearchServiceInterface" default-reply-timeout="13000" > <int:method name="search" request-channel="accountBaseRequestChannel

我有一个如下定义的网关:

 <int:gateway 
    service-interface="com.charter.egateway.integration.accountbase.AccountBaseSearchServiceInterface"  
    default-reply-timeout="13000" >
    <int:method name="search" request-channel="accountBaseRequestChannel" reply-channel="accountBaseResponseChannel" />
        </int:gateway>

当它在13秒后超时时,我下面的代码接收到一个“null”-但我使用“null”表示“null响应”,即没有内容的响应:

@Secured(SecurityRoles.ROLE_READ)
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE, value = "search", method = RequestMethod.GET)
@ApiOperation(
        value = "This service works like a single entry to execute searches on Salesforce", 
        notes = "Returns a list of accounts."
)
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "Success", response = AccountSearchResponse.class),
        @ApiResponse(code = 400, message = "Invalid request.", response = ErrorResponse.class, responseContainer="List"),
        @ApiResponse(code = 500, message = "Internal Server Error.", response = ErrorResponse.class, responseContainer="List"),
        @ApiResponse(code = 204, message = "No content.", response = AccountSearchResponse.class)
})
public ResponseEntity<?> search(@Valid AccountSearchRequest objectSearch) {

    logger.debug("Returning request: {}.", objectSearch.toString());
    ResponseEntity<ErrorResponse>response = RequestMessageValidator.validate(objectSearch);
    if (null != response) {
        logger.debug("Returning ErrorResponse: {}.", response.toString());
        return response;
    }
    Message<AccountSearchRequest> requestMsg = MessageBuilder.withPayload(objectSearch).setCorrelationId(transaction.getTransactionId()).build();
    EndAccountSearchResponse searchResponse = (EndAccountSearchResponse) service.search(requestMsg);



    if(searchResponse==null){
        logger.debug("Returning no content.");
        return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
    }


    logger.debug("Returning Response: {}.", searchResponse.toString());
    return  ResponseEntity.ok(searchResponse);
}
@SecurityRoles(SecurityRoles.ROLE\u READ)
@RequestMapping(products=MediaType.APPLICATION\u JSON\u VALUE,consumes=MediaType.APPLICATION\u JSON\u VALUE,VALUE=“search”,method=RequestMethod.GET)
@蜂房手术(
value=“此服务的工作方式与在Salesforce上执行搜索的单个条目类似”,
notes=“返回帐户列表。”
)
@ApiResponses(值={
@ApiResponse(code=200,message=“Success”,response=AccountSearchResponse.class),
@ApiResponse(code=400,message=“Invalid request.”,response=ErrorResponse.class,responseContainer=“List”),
@ApiResponse(代码=500,message=“内部服务器错误”,response=ErrorResponse.class,responseContainer=“列表”),
@ApiResponse(code=204,message=“无内容”,response=AccountSearchResponse.class)
})
公共响应属性搜索(@Valid AccountSearchRequest objectSearch){
debug(“返回请求:{}.”,objectSearch.toString());
ResponseEntityresponse=RequestMessageValidator.validate(objectSearch);
if(null!=响应){
debug(“返回ErrorResponse:{}.”,response.toString());
返回响应;
}
MessageRequestMsg=MessageBuilder.withPayload(objectSearch).setCorrelationId(transaction.getTransactionId()).build();
EndAccountSearchResponse searchResponse=(EndAccountSearchResponse)service.search(requestMsg);
if(searchResponse==null){
debug(“不返回任何内容”);
返回新的响应属性(HttpStatus.NO_内容);
}
debug(“返回响应:{}.”,searchResponse.toString());
返回ResponseEntity.ok(searchResponse);
}
我如何区分结果和超时,超时为null和“无内容”(searchResponse==null)

请注意,

您不能“返回null”
null
是无效的消息负载;当集成流中的组件返回null时;水流停止;不会将任何内容发送回网关。在这种情况下,网关将始终超时(并返回null)

您应该返回一个表示没有结果的特殊值,或者抛出一个异常(并捕获它)