2016-05-17 10 views
1

WP-APIプラグインを使用しているWordPress Webサイトを使用しているため、Androidアプリのデータをリクエストできます。
これまではデータを取得していましたが、Androidユーザーが記事にコメントできるようにしたいと考えています。
APIを使用して新しいコメントを作成できるようにする必要がありますが、それを私のために働かせることはできません。WP-APIのGETおよびPOST JSONスキームの違いに対処する方法

これは私が間違っていると思われるものである:
GETリクエスト:

{ 
"id": ​3, 
"post": ​275, 
"author": ​1, 
"date": "2016-05-12T12:10:03", 
"content": 
{ 
    "rendered": "<p>asdfsdfsadf</p>\n" 
} 
} 

期待POSTリクエスト:

{ 
"id": ​3, 
"post": ​275, 
"author": ​1, 
"date": "2016-05-12T12:10:03", 
"content": "<p>asdfsdfsadf</p>\n"  
} 

はPOJO:

public class CommentModel { 
    public Integer id; 
    public Date date; 
    public Date modified; 
    public Content content; 
    public int post; 
    public int author; 

    public class Content { 
     public String rendered; 
    } 
} 

あなたが見ることができるように、 POSTリクエストは、GETリクエストとPOJOのフォーマットが異なっていますGET要求後に導かれた。
シリアル化にGSONを使用していますが、これはGETリクエストのようなJSONを作成します。これはPOSTでは機能しません。
リクエストはretrofitとOkHTTPを使用して行われます。

次のエラーがワードプレスでスローされます。

Warning: stripslashes() expects parameter 1 to be string, array given in wp-includes/kses.php on line 1566 
{"code":"rest_cannot_read_post","message":"Sorry, you cannot read the post for this comment.","data":{"status":403}} 

私の質問です:

は私が誰かを願って同じPOJOを使用して、コメントを取得するために、新たなコメントを投稿してもできるようにすることができるようにする方法私を助けることができます!

+0

['/sites/$site/posts/$post_ID/replies/'](https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/posts/%24post_ID/replies) /)、['/sites/$site/posts/$post_ID/replies/new'](https://developer.wordpress.com/docs/api/1.1/post/sites/%24site/posts/%24post_ID/)返信/新規/)...これは完全に文書化されているので、何が問題なのですか? – vard

+0

私はWordPress.comではなく、[WP-API](http://v2.wp-api.org/)プラグインで自己ホスト版(.org)を使用しています。私が見る限り、これはまったく異なっています。 – thomas479

答えて

2

私はそれを自分で修正しました。

public static class ContentSerializer implements JsonSerializer<CommentModel.Content> { 
     public JsonElement serialize(final CommentModel.Content content, final Type type, final JsonSerializationContext context) { 
      return new JsonPrimitive(content.rendered); 
     } 
    } 

とGsonシリアライザの作成とそれを登録する:

修正は次のようにカスタムJsonSerialiserを使用していた

Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") 
       .registerTypeAdapter(CommentModel.Content.class, new ContentSerializer()) 
       .create(); 

そして、それが正しいJSONを生成します!

関連する問題