我正在尝试通过发布请求获取访问令牌。我已经尝试过邮递员的请求,它完美无缺。但是当我从我的应用程序尝试时,我得到错误
{error:“invalid_request”,error_description:“无效的grant_type参数或参数缺失”}
这是我尝试过的java代码:
RestAssured.baseURI
="http://localhost:8180/auth/realms/acme/protocol/openid-
connect/token";
RequestSpecification request = RestAssured.given();
JSONObject requestParams = new JSONObject();
requestParams.put("grant_type", "password");
requestParams.put("username", "amineamine"); // Cast
requestParams.put("password", "amineamine");
requestParams.put("client_id", "app-backend-springboot");
requestParams.put("client_secret", "9a1707db-431d-437c-bb70-
0e5f5d61dcb0");
request.body(requestParams.toJSONString());
request.header("Content-Type", "application/x-www-form-urlencoded;
charset=UTF-8");
Response response = request.post();
int statusCode = response.getStatusCode();
System.out.println(response.print());
System.out.println("The status code recieved: " + statusCode);
System.out.println("Response body: " +
response.body().asString());
这些是进口:
import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.json.simple.JSONObject;
我发现您的代码存在一个重要问题,我认为可以很好地解释您的问题。您正在发送JSON,但您正在发送一个Content-Type标头,建议您发送表单数据。
由于你的Postman示例正在发送表单数据,我认为这就是你想要做的。保留Content-Type标头,但将POST主体更改为表单数据。你拥有它的方式,两者不匹配。表单数据的正确结构不是JSON。
以下是有关如何使用RestAssured发送表单数据的现有帖子:
How to send a Content-Type form-data request using rest assured?
总而言之,您希望将参数放在Map中,然后将该映射传递给请求构建器链中的formParams()
方法。