web-dev-qa-db-ja.com

安心-パラメータと本文でPOST)できません

RestAssuredを使用してREST apiをテストしています。URLと本文の両方のコンテンツでPOSTを実行しようとすると、エラーが発生します。手動でテストする場合、これは正しく機能します。URLからパラメータを削除することはできません。

テストコード:

String endpoint = http://localhost:8080/x/y/z/id?custom=test;
String body = "[{\"boolField\":true,\"intField\":991},
                {\"boolField\":false,\"intField\":998}]";
expect().spec(OK).given().body(body).post(endpoint);

実行時に次のエラーをスローします

You can either send parameters OR body content in the POST, not both!

Java.lang.IllegalStateException: You can either send parameters OR body content in the POST, not both!
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.Java:77)
at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.Java:102)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.Java:198)
at com.jayway.restassured.internal.RequestSpecificationImpl.sendRequest(RequestSpecificationImpl.groovy:282)
at com.jayway.restassured.internal.RequestSpecificationImpl.this$2$sendRequest(RequestSpecificationImpl.groovy)
at com.jayway.restassured.internal.RequestSpecificationImpl$this$2$sendRequest.callCurrent(Unknown Source)
at com.jayway.restassured.internal.RequestSpecificationImpl.post(RequestSpecificationImpl.groovy:83)
...

Rest AssuredがPOSTでパラメーターと本文コンテンツの両方を許可しないのはなぜですか?

11
Jake Walsh

パラメータは、「param」や「parameter」ではなく、queryParameterとして指定する必要があります。 POSTのパラメータは、デフォルトでリクエスト本文で送信されるパラメータを形成します。

つまり.

given().
        queryParam("name, "value").
        body(..).
when().
        post(..);
29
Johan

パラメータをqueryParamとして指定する必要があります。次に例を示します。

RequestSpecification request=new RequestSpecBuilder().build();
ResponseSpecification response=new ResponseSpecBuilder().build();
@Test
public void test(){
  User user=new User();
  given()
  .spec(request)
  .queryParam(query_param1_name, query_param1_name_value)
  .queryParam(query_param2_name, query_param2_name_value)
  .contentType(ContentType.JSON)
  .body(user)
  .post(API_ENDPOINT)
  .then()
  .statusCode(200).log().all();

}

0
Nitin Pawar

私は安心感についてはあまり詳しくありませんが、これらのパラメーターを本体に移動できるはずです。これが典型的なPOSTパラメータの仕組みです。リクエストURLの一部としてパラメータを持つことは、通常GETに対してのみ行われます。「custom = test」を本文の最初の行にしてみてください。

0
Joe K