如何将HttpResponse的JSON直接转换为Java 17 Record?
Java 17 HttpClient响应JSON转Java Record方案
Java 17的标准库(包括HttpClient)确实没有内置JSON与Java对象(含Record)的序列化/反序列化能力,必须借助第三方JSON处理库,Jackson是最常用的选择之一(Jackson 2.12及以上版本原生支持Java Record)。
实现步骤
引入Jackson依赖
如果使用Maven,在pom.xml中添加:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 使用最新稳定版本即可 --> </dependency>编写完整代码
先定义你的Record:record GetBearerTokenResponse(String access_token, String expires_in, String token_type) {}接着结合HttpClient完成请求与转换:
// 建议将HttpClient和ObjectMapper设为全局单例,避免重复初始化 HttpClient httpClient = HttpClient.newHttpClient(); ObjectMapper objectMapper = new ObjectMapper(); // 构建GET请求 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("目标API地址")) .GET() .build(); // 发送请求并获取响应 HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); // 将JSON响应直接转换为Record实例 GetBearerTokenResponse tokenResp = objectMapper.readValue(response.body(), GetBearerTokenResponse.class); // 直接访问Record的组件 System.out.println("获取到的Token: " + tokenResp.access_token());
补充说明
- 若API返回的字段名与Record组件名不匹配,可通过Jackson的
@JsonProperty注解手动指定映射关系 ObjectMapper是线程安全的,全局复用能提升性能
内容的提问来源于stack exchange,提问作者Stanislav Ivanov
相关产品推荐
相关产品推荐

