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

如何配置Micronaut声明式客户端接收PATCH请求的空响应?

出现该错误的核心原因是Micronaut声明式HTTP客户端默认配置下,仅会跳过204(无内容)状态码的响应体解析逻辑,对于返回200状态码但响应体为空的场景,依然会尝试触发解码器解析空内容,由此抛出异常。可通过以下几种方案解决:

方案1:调整客户端方法返回类型

将对应@Patch注解标注的客户端方法返回值设置为void或者HttpResponse<Void>,框架识别到没有需要解析的业务返回类型,就会跳过响应体解码步骤。

import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Patch;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.http.HttpResponse;

@Client("your-target-service")
public interface ResourceClient {
    // 不需要获取响应元信息直接返回void
    @Patch("/resource/{id}")
    void updateResource(Long id, @Body ResourceUpdateDTO updateDTO);

    // 需要获取状态码、响应头等信息时返回HttpResponse<Void>
    @Patch("/resource/{id}")
    HttpResponse<Void> updateResourceWithMeta(Long id, @Body ResourceUpdateDTO updateDTO);
}

方案2:方法级别关闭空响应报错

如果业务逻辑允许该接口既可能返回空响应,也可能返回对应业务实体,可以在方法上添加@ErrorOnEmptyResponse(false)注解,强制框架接受空响应,解码为空值而不是抛出异常。

import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Patch;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.http.client.annotation.ErrorOnEmptyResponse;

@Client("your-target-service")
public interface ResourceClient {
    @Patch("/resource/{id}")
    @ErrorOnEmptyResponse(false)
    ResourceDTO updateResource(Long id, @Body ResourceUpdateDTO updateDTO);
}

该配置下如果服务端返回空响应,方法会直接返回null,不会触发解码错误。

方案3:全局配置关闭空响应报错

如果需要对所有HTTP客户端接口生效,可以在配置文件application.yml中添加如下配置:

micronaut:
  http:
    client:
      error-on-empty-response: false

内容的提问来源于stack exchange,提问作者shmish111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:02