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

如何在Jersey Rest Service中直接获取客户端原始JSON请求?

获取Jersey中客户端传递的原始JSON请求体

当然可以直接获取原始JSON啦!完全不用先转换成Java对象,刚好解决你提到的转对象后转回JSON带空值、还要加注解的麻烦问题。下面给你几种简单实用的实现方式:

方法1:直接用String接收(最简单)

Jersey会自动将请求体的原始JSON字符串绑定到String参数上,直接用就行:

@POST
@Path("/your-api-path")
@Consumes(MediaType.APPLICATION_JSON)
public Response receiveRawJson(String rawJson) {
    // rawJson就是客户端传来的完整原始JSON
    System.out.println("客户端原始JSON:" + rawJson);
    // 后续直接处理这个字符串即可
    return Response.ok("已收到原始JSON").build();
}

方法2:用InputStream接收(适合流处理场景)

如果需要处理大体积的JSON,或者想自己控制流的读取,可以用InputStream接收:

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

@POST
@Path("/your-api-path")
@Consumes(MediaType.APPLICATION_JSON)
public Response receiveRawJson(InputStream jsonInputStream) throws IOException {
    // 将输入流转为字符串
    String rawJson = new String(jsonInputStream.readAllBytes(), StandardCharsets.UTF_8);
    // 处理原始JSON
    return Response.ok().build();
}

方法3:用Jackson的JsonNode接收(兼顾灵活性和易用性)

如果既想拿到原始JSON结构,又想方便地操作各个字段,直接用Jackson的JsonNode类型接收是个好选择——它不会引入空值,转回字符串就是原始格式:

import com.fasterxml.jackson.databind.JsonNode;

@POST
@Path("/your-api-path")
@Consumes(MediaType.APPLICATION_JSON)
public Response receiveRawJson(JsonNode jsonNode) {
    // 直接操作JSON节点,比如获取指定参数
    String param1 = jsonNode.get("param1").asText();
    int param2 = jsonNode.get("param2").asInt();
    
    // 转回原始JSON字符串也不会有空值
    String rawJson = jsonNode.toString();
    return Response.ok().build();
}

以上三种方法都不需要定义POJO类,自然也不用额外加@JsonInclude(Include.NON_NULL)注解,完美适配你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:53