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

使用Rest Assured自动化Post API时Eclipse出现黄色高亮错误及500状态码

解决Rest Assured Post API测试的两个问题:类型安全警告与500状态码错误

一、类型安全警告问题

问题描述

Eclipse中代码出现黄色高亮警告:Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type HashMap<K,V> should be parameterized

原因

你使用的org.json.simple.JSONObject底层基于原始类型的HashMap实现,未指定泛型参数<K,V>,因此Java编译器抛出类型安全警告。

解决方法

有两种常用方案:

  1. 替换为带泛型支持的JSON库
    改用Java原生的org.json.JSONObject(或Jackson/Gson的JSON对象),这类库的put方法支持泛型,从根源消除警告。
    若用Maven,可添加依赖:

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20240303</version>
    </dependency>
    

    代码中导入改为:import org.json.JSONObject;

  2. 临时抑制警告
    若不想更换库,可在方法上添加注解屏蔽警告:

    @SuppressWarnings("unchecked")
    @Test
    public void createBooking() {
        // 原代码逻辑
    }
    

二、500状态码错误问题

问题描述

调用Post接口返回500状态码,而非预期的200/201

原因

请求JSON存在3处错误,导致后端解析失败抛出异常:

  1. 嵌套对象传递错误:booking.put("bookingdates", "bookingdates"); 传入的是字符串"bookingdates",而非创建的bookingdates JSONObject对象。
  2. 数据类型不匹配:totalprice应为数字类型,你传了字符串"1000";depositpaid应为布尔类型,你传了字符串"true",后端无法正确解析这些类型。

解决方法

修正请求参数的类型和嵌套对象传递:

package com.testautomation.apitesting;

import org.json.JSONObject; // 替换为带泛型的JSON库
import org.testng.annotations.Test;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;

public class PostAPIRequest {
    
    @SuppressWarnings("unchecked") // 若用json-simple则加此注解,用org.json可省略
    @Test
    public void createBooking() {

        JSONObject booking = new JSONObject();
        JSONObject bookingdates = new JSONObject();
        
        // 修正数据类型:totalprice用整数,depositpaid用布尔值
        booking.put("firstname", "Garima");
        booking.put("lastname", "Nandal");
        booking.put("totalprice", 1000); // 改为整数
        booking.put("depositpaid", true); // 改为布尔值
        booking.put("additionalneeds", "Breakfast");
        booking.put("bookingdates", bookingdates); // 传入对象而非字符串
        
        bookingdates.put("checkin", "2024-06-26");
        bookingdates.put("checkout", "2024-06-27");
        
        RestAssured
            .given()
                .contentType(ContentType.JSON)
                .body(booking.toString())
                .baseUri("https://restful-booker.herokuapp.com/booking")
            .when()
                .post()
            .then()
                .assertThat()
                .statusCode(200); // restful-booker创建成功返回200,部分接口可能返回201
    }
}

验证说明

修正后,请求JSON结构符合接口要求:

{
    "firstname": "Garima",
    "lastname": "Nandal",
    "totalprice": 1000,
    "depositpaid": true,
    "additionalneeds": "Breakfast",
    "bookingdates": {
        "checkin": "2024-06-26",
        "checkout": "2024-06-27"
    }
}

此时后端能正确解析请求,返回预期的200状态码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:22:47