2016-05-17 2 views
1

Ich habe eine WordPress Webseite mit dem WP-API Plugin, so dass ich Daten für meine Android App anfordern kann.
Bis jetzt habe ich nur Daten abgerufen, aber jetzt möchte ich, dass meine Android-Benutzer Kommentare zu Artikeln erstellen können.
Also ich muss in der Lage sein, neue Kommentare über die API zu erstellen, aber ich kann es nicht für mich arbeiten.Wie man mit den Unterschieden im GET und POST JSON Schema der WP-API umgehen kann

Dies ist, was ich denke, ist falsch:
GET-Anfrage:

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

Erwartete POST-Anfrage:

{ 
"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; 
    } 
} 

Wie Sie, die sehen POST-Anfrage ist anders formatiert als die GET-Anfrage und mein POJO ist Modell nach der GET-Anfrage geführt.
Ich verwende GSON für die Serialisierung und es wird JSON erstellen, die wie die GET-Anfrage aussieht; Dies funktioniert nicht bei einem POST.
Die Anfrage erfolgt mit Nachrüstung und OkHTTP.

Der folgende Fehler wird in Wordpress geworfen:

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}} 

Meine Frage ist: Wie die Lage sein, einen neuen Kommentar zu schreiben und auch in der Lage sein, um Kommentare

die gleiche POJO verwenden bekommen

Ich hoffe jemand kann mir helfen!

+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/ Antworten/new /) ... Das ist gründlich dokumentiert, was ist das Problem? – vard

+0

Ich verwende nicht WordPress.com, sondern die selbst gehostete Version (.org) mit dem [WP-API] (http://v2.wp-api.org/) Plugin. Soweit ich sehen kann, ist das völlig anders. – thomas479

Antwort

2

Ich habe es endlich selbst behoben!

Das Update eine benutzerdefinierte JsonSerialiser in der folgenden Art und Weise wurde mit:

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); 
     } 
    } 

und es mit der Schaffung des Gson Serializer Registrierung:

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

Dann wird es die richtige JSON generieren!

Verwandte Themen