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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:05:12