基于Resteasy+Jackson从javax.ws.rs.core.Response提取id字段
从Resteasy Response中提取id字段的实用方案
方法一:直接转为实体类(推荐)
如果接口返回的JSON结构包含id字段,直接用Response的readEntity方法转成对应实体类,就能直接获取id,这是最简洁的方式。
假设接口返回的JSON格式类似:
{ "id": 1001, "name": "test" }
你可以定义一个极简的DTO类(只保留需要的id字段即可):
public class CustomerResult { private Long id; // 生成getter方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
客户端调用后处理响应:
Response response = yourClient.createCustomer(customer); if (response.getStatus() == Response.Status.CREATED.getStatusCode()) { CustomerResult result = response.readEntity(CustomerResult.class); Long targetId = result.getId(); // 用id执行后续逻辑 }
方法二:用Jackson JsonNode解析(无需实体类)
如果不想额外创建实体类,可以把响应转成Jackson的JsonNode,直接定位提取id字段。
首先确保项目引入了Resteasy的Jackson2依赖(Maven示例):
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>你的Resteasy对应版本</version> </dependency>
然后编写解析逻辑:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; // ... Response response = yourClient.createCustomer(customer); if (response.getStatus() == Response.Status.CREATED.getStatusCode()) { // 先把响应转成JSON字符串 String jsonContent = response.readEntity(String.class); // 用ObjectMapper解析为JsonNode ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(jsonContent); // 根据id的实际类型选择方法,比如asLong()、asInt()、asText() Long targetId = rootNode.get("id").asLong(); }
关于你遇到的EntityUtils问题
EntityUtils是Apache HttpClient的工具类,和JAX-RS的javax.ws.rs.core.Response不兼容,直接用Response自带的readEntity(String.class)就能拿到JSON字符串,完全不需要EntityUtils。
内容的提问来源于stack exchange,提问作者akanesora
相关产品推荐
相关产品推荐

