You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Function Azure Web Adapter未正确处理ResponseEntity状态码

解决方案

在Spring Cloud Function Azure Web Adapter环境下,直接返回ResponseEntity会被适配器默认处理为200响应,这是因为适配器对Spring MVC的响应模型兼容性有限。可以通过以下几种方式解决:

方法一:使用Azure原生HttpResponseMessage构建响应

直接借助Azure Functions的HttpRequestMessage来创建符合要求的重定向响应,绕过Spring MVC的ResponseEntity适配问题:

@PostMapping("/redirect")
HttpResponseMessage checkRedirect(HttpRequestMessage<Optional<String>> request) {
    return request.createResponseBuilder(HttpStatus.FOUND)
            .header("Location", "/example")
            .build();
}

这种方式直接利用Azure Functions的原生API,能确保状态码和响应头被正确设置。

方法二:自定义响应转换器

如果希望继续使用ResponseEntity,可以自定义一个AzureFunctionResponseMessageConverter,让适配器正确解析ResponseEntity中的状态码和头信息:

@Component
public class ResponseEntityConverter implements AzureFunctionResponseMessageConverter {

    @Override
    public boolean supports(Class<?> returnType) {
        return ResponseEntity.class.isAssignableFrom(returnType);
    }

    @Override
    public HttpResponseMessage convert(Object value, HttpRequestMessage<?> request) {
        ResponseEntity<?> responseEntity = (ResponseEntity<?>) value;
        return request.createResponseBuilder(responseEntity.getStatusCode())
                .headers(headers -> headers.putAll(responseEntity.getHeaders()))
                .body(responseEntity.getBody())
                .build();
    }
}

这个转换器会被Spring Cloud Function Azure Adapter自动识别,处理所有返回ResponseEntity的方法,将其状态码、头和体正确映射到Azure的响应中。

方法三:配置适配器属性(部分版本支持)

检查使用的Spring Cloud Function Azure Adapter版本,部分新版本支持通过配置开启状态码传递,在application.properties中添加:

spring.cloud.function.adapter.azure.http.response.preserve-status-code=true

注意该属性的有效性取决于适配器版本,建议先确认对应版本的文档。

内容的提问来源于stack exchange,提问作者end-user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:15:03