Skip to content

Commit eefe04d

Browse files
authored
Merge pull request #161 from yvasyliev/160-bug-messageevent-doesnt-support-plain-string-in-payload-probable-fix-provided
Fixed #160
2 parents c9141a7 + 894bb56 commit eefe04d

File tree

4 files changed

+98
-3
lines changed

4 files changed

+98
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ This library uses the next third-party dependencies:
5050
<dependency>
5151
<groupId>com.github.yvasyliev</groupId>
5252
<artifactId>java-vk-bots-longpoll-api</artifactId>
53-
<version>4.1.0</version>
53+
<version>4.1.1</version>
5454
</dependency>
5555
```
5656
4. Extend `LongPollBot` class and override necessary methods:

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<groupId>com.github.yvasyliev</groupId>
77
<artifactId>java-vk-bots-longpoll-api</artifactId>
88
<packaging>jar</packaging>
9-
<version>4.1.0</version>
9+
<version>4.1.1</version>
1010
<name>Java VK Bots Long Poll API</name>
1111
<description>A Java library to create VK bots using Bots Long Poll API</description>
1212
<url>https://github.com/yvasyliev/java-vk-bots-long-poll-api</url>

src/main/java/api/longpoll/bots/adapters/deserializers/PayloadDeserializer.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.gson.JsonDeserializer;
66
import com.google.gson.JsonElement;
77
import com.google.gson.JsonParseException;
8+
import com.google.gson.JsonSyntaxException;
89

910
import java.lang.reflect.Type;
1011

@@ -20,7 +21,21 @@ public class PayloadDeserializer implements JsonDeserializer<JsonElement> {
2021
@Override
2122
public JsonElement deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
2223
return jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isString()
23-
? GSON.fromJson(jsonElement.getAsString(), JsonElement.class)
24+
? parseString(jsonElement)
2425
: jsonElement;
2526
}
27+
28+
/**
29+
* Parses string.
30+
*
31+
* @param jsonElement string value.
32+
* @return JSON if provided string is a valid JSON, same string otherwise.
33+
*/
34+
private JsonElement parseString(JsonElement jsonElement) {
35+
try {
36+
return GSON.fromJson(jsonElement.getAsString(), JsonElement.class);
37+
} catch (JsonSyntaxException e) {
38+
return jsonElement;
39+
}
40+
}
2641
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package api.longpoll.bots.adapters.deserializers;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonElement;
5+
import com.google.gson.JsonObject;
6+
import com.google.gson.JsonPrimitive;
7+
import com.google.gson.annotations.JsonAdapter;
8+
import org.junit.jupiter.api.Test;
9+
10+
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertTrue;
12+
13+
class PayloadDeserializerTest {
14+
Gson gson = new Gson();
15+
16+
@Test
17+
void parseBooleanTest() {
18+
String json = "{\"payload\":true}";
19+
20+
JsonElement payload = gson.fromJson(json, PayloadHolder.class).payload;
21+
assertTrue(payload.isJsonPrimitive());
22+
23+
JsonPrimitive jsonPrimitive = payload.getAsJsonPrimitive();
24+
assertTrue(jsonPrimitive.isBoolean());
25+
assertTrue(jsonPrimitive.getAsBoolean());
26+
}
27+
28+
@Test
29+
void parseStringTest() {
30+
String json = "{\"payload\":\"Hello World!\"}";
31+
32+
JsonElement payload = gson.fromJson(json, PayloadHolder.class).payload;
33+
assertTrue(payload.isJsonPrimitive());
34+
35+
JsonPrimitive jsonPrimitive = payload.getAsJsonPrimitive();
36+
assertTrue(jsonPrimitive.isString());
37+
assertEquals("Hello World!", jsonPrimitive.getAsString());
38+
}
39+
40+
@Test
41+
void parseJsonTest() {
42+
String json = "{\"payload\":{\"foo\":\"bar\"}}";
43+
44+
JsonElement payload = gson.fromJson(json, PayloadHolder.class).payload;
45+
assertTrue(payload.isJsonObject());
46+
47+
JsonObject jsonObject = payload.getAsJsonObject();
48+
assertTrue(jsonObject.has("foo"));
49+
50+
JsonElement foo = jsonObject.get("foo");
51+
assertTrue(foo.isJsonPrimitive());
52+
53+
JsonPrimitive jsonPrimitive = foo.getAsJsonPrimitive();
54+
assertTrue(jsonPrimitive.isString());
55+
assertEquals("bar", jsonPrimitive.getAsString());
56+
}
57+
58+
@Test
59+
void parseStringJsonTest() {
60+
String json = "{\"payload\":\"{\\\"foo\\\":\\\"bar\\\"}\"}";
61+
62+
JsonElement payload = gson.fromJson(json, PayloadHolder.class).payload;
63+
assertTrue(payload.isJsonObject());
64+
65+
JsonObject jsonObject = payload.getAsJsonObject();
66+
assertTrue(jsonObject.has("foo"));
67+
68+
JsonElement foo = jsonObject.get("foo");
69+
assertTrue(foo.isJsonPrimitive());
70+
71+
JsonPrimitive jsonPrimitive = foo.getAsJsonPrimitive();
72+
assertTrue(jsonPrimitive.isString());
73+
assertEquals("bar", jsonPrimitive.getAsString());
74+
}
75+
76+
static class PayloadHolder {
77+
@JsonAdapter(PayloadDeserializer.class)
78+
JsonElement payload;
79+
}
80+
}

0 commit comments

Comments
 (0)