Micronaut HttpClient调用exchange方法返回body始终为null问题
问题原因
这不是框架Bug,属于API使用方法的问题,原因如下:
- Micronaut低层级
HttpClient提供的单参数exchange(HttpRequest)重载方法,设计上默认仅返回响应元数据(状态码、响应头),不会消费、反序列化响应体内容,因此返回的HttpResponse中body为null。该设计是为了适配仅需要校验响应状态、头信息的场景,减少不必要的序列化开销。 - 你测试中使用的
retrieve方法默认会将响应体反序列化为String类型,因此对应测试可以正常拿到返回内容。 - 你定义变量时声明的
HttpResponse<String>泛型信息会在Java运行时被类型擦除,框架无法通过泛型推导你期望的响应体类型,因此必须显式传入类型参数告知框架。
正确用法
调用exchange方法时传入第二个参数指定响应体的类型即可,示例如下:
HttpResponse<String> response = client.toBlocking() .exchange(HttpRequest.GET("/2").accept(MediaType.TEXT_PLAIN), String.class);
内容的提问来源于stack exchange,提问作者twobiers
相关产品推荐
相关产品推荐

