如何用Rest Assured和Java为Demoblaze登录API字符串响应创建POJO
解决Demoblaze登录API非JSON响应的反序列化问题
针对Demoblaze登录API返回的纯字符串格式响应("Auth_token: aG9yYWNpb3NzMTE2OTc2NDM="),可以通过以下两种方式结合Rest Assured和Java完成POJO创建与反序列化:
1. 手动解析+POJO赋值(简单直接)
步骤1:创建POJO类
首先定义一个用于存储认证令牌的POJO:
public class LoginResponse { private String authToken; public String getAuthToken() { return authToken; } public void setAuthToken(String authToken) { this.authToken = authToken; } }
步骤2:Rest Assured请求+手动解析响应
发送请求后提取字符串响应,去除多余引号并拆分出令牌值,再手动赋值给POJO:
import io.restassured.RestAssured; import static io.restassured.RestAssured.given; public class LoginTest { public static void main(String[] args) { RestAssured.baseURI = "https://api.demoblaze.com"; String requestBody = "{\"username\": \"horacioss1\", \"password\": \"1234567890\"}"; // 发送请求并获取响应字符串 String rawResponse = given() .header("Content-Type", "application/json") .body(requestBody) .when() .post("/login") .then() .statusCode(200) .extract() .asString(); // 处理响应字符串,提取令牌 String cleanedResponse = rawResponse.replace("\"", "").trim(); String authToken = cleanedResponse.split(": ")[1]; // 赋值给POJO LoginResponse loginResponse = new LoginResponse(); loginResponse.setAuthToken(authToken); // 使用令牌 System.out.println("提取到的认证令牌:" + loginResponse.getAuthToken()); } }
2. 自定义Jackson反序列化(更优雅)
如果希望利用Jackson的序列化机制自动处理,可以编写自定义反序列化器:
步骤1:添加Jackson依赖
确保项目中包含Jackson核心依赖(Maven示例):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
步骤2:编写自定义反序列化器
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; public class LoginResponseDeserializer extends JsonDeserializer<LoginResponse> { @Override public LoginResponse deserialize(JsonParser parser, DeserializationContext context) throws IOException { // 处理带引号的响应字符串 String rawResponse = parser.getText().replace("\"", "").trim(); String authToken = rawResponse.split(": ")[1]; LoginResponse response = new LoginResponse(); response.setAuthToken(authToken); return response; } }
步骤3:为POJO添加反序列化注解
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = LoginResponseDeserializer.class) public class LoginResponse { private String authToken; public String getAuthToken() { return authToken; } public void setAuthToken(String authToken) { this.authToken = authToken; } }
步骤4:Rest Assured中直接反序列化为POJO
import io.restassured.RestAssured; import io.restassured.http.ContentType; import static io.restassured.RestAssured.given; public class LoginTestWithJackson { public static void main(String[] args) { RestAssured.baseURI = "https://api.demoblaze.com"; String requestBody = "{\"username\": \"horacioss1\", \"password\": \"1234567890\"}"; // 直接将响应反序列化为POJO LoginResponse loginResponse = given() .contentType(ContentType.JSON) .body(requestBody) .when() .post("/login") .then() .statusCode(200) .extract() .as(LoginResponse.class); System.out.println("提取到的认证令牌:" + loginResponse.getAuthToken()); } }
内容的提问来源于stack exchange,提问作者Ali Eleish
相关产品推荐
相关产品推荐

