如何在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
相关产品推荐
相关产品推荐

