Skip to content

Commit b283600

Browse files
committed
fixed: Use correct type for serializatoin/deserialization of ignorePlurals
Currently, ignorePlurals, which could be either a boolean or a list of languages (as strings) is serialized to boolean or comma-separated string of languages, which is incorrect. This commit now correctly serialize ignorePlurals as either a boolean or an array of strings, and conversely when deserializing.
1 parent 4e63598 commit b283600

2 files changed

Lines changed: 16 additions & 15 deletions

File tree

algoliasearch-common/src/main/java/com/algolia/search/objects/IgnorePlurals.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
55
import com.fasterxml.jackson.core.JsonGenerator;
66
import com.fasterxml.jackson.core.JsonParser;
7-
import com.fasterxml.jackson.core.JsonProcessingException;
8-
import com.fasterxml.jackson.core.JsonToken;
97
import com.fasterxml.jackson.databind.DeserializationContext;
108
import com.fasterxml.jackson.databind.JsonDeserializer;
119
import com.fasterxml.jackson.databind.JsonSerializer;
@@ -14,7 +12,6 @@
1412
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1513
import java.io.IOException;
1614
import java.io.Serializable;
17-
import java.util.Arrays;
1815
import java.util.List;
1916

2017
@JsonDeserialize(using = IgnorePluralsDeserializer.class)
@@ -92,11 +89,11 @@ public String toString() {
9289
class IgnorePluralsDeserializer extends JsonDeserializer<IgnorePlurals> {
9390

9491
@Override
95-
public IgnorePlurals deserialize(JsonParser p, DeserializationContext ctxt)
96-
throws IOException, JsonProcessingException {
97-
JsonToken currentToken = p.getCurrentToken();
98-
if (currentToken.equals(JsonToken.VALUE_STRING)) {
99-
return IgnorePlurals.of(Arrays.asList(p.getValueAsString().split(",")));
92+
public IgnorePlurals deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
93+
94+
if (p.isExpectedStartArrayToken()) {
95+
List languages = p.readValueAs(List.class);
96+
return IgnorePlurals.of(languages);
10097
}
10198

10299
return IgnorePlurals.of(p.getBooleanValue());
@@ -108,12 +105,16 @@ class IgnorePluralsSerializer extends JsonSerializer<IgnorePlurals> {
108105
@SuppressWarnings("unchecked")
109106
@Override
110107
public void serialize(IgnorePlurals value, JsonGenerator gen, SerializerProvider serializers)
111-
throws IOException, JsonProcessingException {
108+
throws IOException {
112109
if (value instanceof IgnorePluralsBoolean) {
113110
gen.writeBoolean((Boolean) value.getInsideValue());
114111
} else if (value instanceof IgnorePluralsListString) {
115-
List<String> list = (List<String>) value.getInsideValue();
116-
gen.writeString(String.join(",", list));
112+
List<String> languages = (List<String>) value.getInsideValue();
113+
gen.writeStartArray();
114+
for (String lang : languages) {
115+
gen.writeString(lang);
116+
}
117+
gen.writeEndArray();
117118
}
118119
}
119120
}

algoliasearch-tests/src/test/java/com/algolia/search/JacksonParserTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,11 @@ public void serializeIgnorePlurals() throws IOException {
119119
settings =
120120
new IndexSettings().setIgnorePlurals(IgnorePlurals.of(Collections.singletonList("en")));
121121
assertThat(DEFAULT_OBJECT_MAPPER.writeValueAsString(settings))
122-
.isEqualTo("{\"ignorePlurals\":\"en\"}");
122+
.isEqualTo("{\"ignorePlurals\":[\"en\"]}");
123123

124124
settings = new IndexSettings().setIgnorePlurals(Arrays.asList("en", "fr"));
125125
assertThat(DEFAULT_OBJECT_MAPPER.writeValueAsString(settings))
126-
.isEqualTo("{\"ignorePlurals\":\"en,fr\"}");
126+
.isEqualTo("{\"ignorePlurals\":[\"en\",\"fr\"]}");
127127
}
128128

129129
@Test
@@ -138,13 +138,13 @@ public void deserializeIgnorePlurals() throws IOException {
138138

139139
ignorePlurals =
140140
DEFAULT_OBJECT_MAPPER
141-
.readValue("{\"ignorePlurals\":\"en\"}", IndexSettings.class)
141+
.readValue("{\"ignorePlurals\":[\"en\"]}", IndexSettings.class)
142142
.getIgnorePlurals();
143143
assertThat(ignorePlurals).isEqualTo(IgnorePlurals.of(Collections.singletonList("en")));
144144

145145
ignorePlurals =
146146
DEFAULT_OBJECT_MAPPER
147-
.readValue("{\"ignorePlurals\":\"en,fr\"}", IndexSettings.class)
147+
.readValue("{\"ignorePlurals\":[\"en\",\"fr\"]}", IndexSettings.class)
148148
.getIgnorePlurals();
149149
assertThat(ignorePlurals).isEqualTo(IgnorePlurals.of(Arrays.asList("en", "fr")));
150150
}

0 commit comments

Comments
 (0)