Java API自动化:无需转义符直接传递JSON请求体的方案咨询
Java无转义符编写JSON请求体的可行方案
首先明确:你贴的第二种直接把{...}赋值给String的写法在Java里根本编译不过,因为Java规定字符串必须用双引号包裹,裸写JSON结构会被当成语法错误。下面给你几种不用手动加转义符的实用方案:
1. Java 15+ 自带文本块(无需额外依赖)
从Java 15开始,支持用三个双引号"""包裹的文本块,里面可以直接写带格式的JSON,不用转义引号,甚至换行都不用手动处理:
public static String postRequest() { // 带格式的JSON,输出会保留换行和缩进 String payload = """ { "name":"morpheus", "job":"leader" }"""; return payload; }
如果要无格式化的紧凑JSON,直接把内容挤成一行即可:
public static String postRequest() { String payload = """{"name":"morpheus","job":"leader"}"""; return payload; }
2. 用JSON序列化库(推荐,适合复杂场景)
如果请求体需要动态生成、字段较多,直接写字符串容易出错,推荐用Jackson或Gson这类库,把Java对象自动转成JSON字符串,全程不用手动写JSON:
Jackson实现步骤
- 引入Maven依赖(Gradle同理):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
- 定义与JSON结构对应的实体类:
class UserPayload { private String name; private String job; // 全参构造方法 public UserPayload(String name, String job) { this.name = name; this.job = job; } // 必须提供getter/setter,否则Jackson无法序列化 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } }
- 生成JSON字符串:
import com.fasterxml.jackson.databind.ObjectMapper; public static String postRequest() throws Exception { UserPayload payload = new UserPayload("morpheus", "leader"); ObjectMapper mapper = new ObjectMapper(); // 生成无格式的紧凑JSON return mapper.writeValueAsString(payload); }
Gson实现步骤
- 引入Maven依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
- 生成JSON字符串:
import com.google.gson.Gson; public static String postRequest() { UserPayload payload = new UserPayload("morpheus", "leader"); Gson gson = new Gson(); return gson.toJson(payload); }
3. 直接用HTTP客户端传对象(API自动化更高效)
如果是做API自动化测试,RestAssured、OkHttp这类HTTP客户端库支持直接把Java对象作为请求体传递,内部会自动完成JSON序列化,连生成字符串的步骤都省了:
RestAssured示例
import io.restassured.RestAssured; public static void sendPostRequest() { UserPayload payload = new UserPayload("morpheus", "leader"); RestAssured.given() .contentType("application/json") .body(payload) // 直接传对象,自动转JSON .post("你的API接口地址"); }
内容的提问来源于stack exchange,提问作者Samson
相关产品推荐
相关产品推荐

