2016-08-03 3 views
1

json形式でデータを返すが、Content-Type〜ではなくtext/htmlのデータを返すレストAPIが開発されたとしましょう。java REST Content-Type:text/htmlとhtmlタグが挿入された保証レスポンスボディ

は今、私はRESTアシュアードに筆記試験があります。

given() 
    .param("username", username) 
    .param("password", password) 
.when() 
    .get("/authenticate") 
.then() 
    .statusCode(200) 
    .body("user.id" , hasItem(20)); 

を、それは動作しません。私は、レスポンスボディをログアウトして、それは私が得るものです:

<html> 
    <body>{"key":"752E7A74E8F3999BE9EFE3EA0E0DF320","user":{"id":20,"firstName":"K1","lastName":"K1","role":"ROLE_CUSTOMER","phoneNumber":"888888888"},"expirationDate":"2016-08-10T13:52:50+02:00"}</body> 
</html> 

とエラー:bodyタグの間

FAILED: test_login_as_valid_customer("888888888", "3432") 
java.lang.AssertionError: 1 expectation failed. 
JSON path key doesn't match. 
Expected: 20 
    Actual: 

が私の予想されるJSONがあるが、htmlタグはどこから来たのか? PostmanやPawやWebブラウザでapiメソッドをテストすると(url paramsで簡単にGETされているので)、私は応答しません。

「JSONパスキーが一致しません」というエラーが表示されることがあります。それらのタグのために。

答えて

0

エンドポイントの実装方法によっては、返されるデータの形式は、クライアントが送信したAcceptヘッダーの値によって異なる場合があります。したがって、PostmanとRESTAssuredテストでテストするときに送信するヘッダを正確に確認してください。リクエストにAccept: application/jsonを明示的に指定しないと、エンドポイントがHTMLを返している可能性があります。

+0

私は受諾ヘッダーを指定しません。私はRESTAssuredテストで試したときにaccept(ContentType.JSON)を返しましたが、text/htmlを返しました。 –

+0

私はContent-Type:application/jsonを返すapiで同様のテストを実行しようとしました。 jsonのターゲット変数が検出され、アサーションのために適切に抽出されました。 –

0

htmlタグはContent-Typeのtext/htmlであるため、jsonデータはテキストとして認識され、htmlの本文にラップされます。ブラウザのテキストを調べると、おそらくhtmlタグが表示されます。

+0

私はブラウザで応答を検査し、HTMLタグはありませんでした。 –

関連する問題