Skip to content

Commit f1053c7

Browse files
committed
APITool: Nested list causes TypeBinding error fix jooby-project#1230
1 parent 276c4bc commit f1053c7

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

modules/jooby-apitool/src/main/java/org/jooby/internal/apitool/BytecodeRouteParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ public class BytecodeRouteParser {
327327
.isPresent();
328328
static final Predicate<Parameter> SKIP = TYPE_TO_SKIP.and(ANNOTATION_TO_SKIP);
329329

330-
private static final ObjectMapper mapper = new ObjectMapper();
330+
static final ObjectMapper mapper = new ObjectMapper();
331331
private static final String OBJECT = Type.getInternalName(Object.class);
332332
private static final String RETURN_OBJ = "L" + OBJECT + ";";
333333

modules/jooby-apitool/src/main/java/org/jooby/internal/apitool/TypeJsonDeserializer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,11 @@ private static List<Type> parse(final ClassLoader loader, final String type, fin
250250
types.add(element);
251251
singleType.setLength(0);
252252
} else if (ch == '>') {
253-
Type element = BytecodeRouteParser.loadType(loader, singleType.toString());
254-
types.add(element);
253+
if (singleType.length() > 0) {
254+
Type element = BytecodeRouteParser.loadType(loader, singleType.toString());
255+
types.add(element);
256+
singleType.setLength(0);
257+
}
255258
} else if (ch == ']') {
256259
// java.lang.String[]
257260
singleType.setLength(singleType.length() - 1);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.jooby.internal.apitool;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.google.inject.util.Types;
5+
import org.jooby.apitool.ApiToolFeature;
6+
import org.junit.Test;
7+
8+
import java.lang.reflect.ParameterizedType;
9+
import java.lang.reflect.Type;
10+
11+
import static org.junit.Assert.assertEquals;
12+
13+
public class Issue1230 extends ApiToolFeature {
14+
15+
public static class I1230 {
16+
17+
private Type type;
18+
19+
public Type getType() {
20+
return type;
21+
}
22+
23+
public void setType(Type type) {
24+
this.type = type;
25+
}
26+
}
27+
28+
@Test
29+
public void shouldDeserializeComplexTypePropertly() throws Exception {
30+
ObjectMapper mapper = BytecodeRouteParser.mapper;
31+
I1230 expected = new I1230();
32+
ParameterizedType type = Types.listOf(Types.listOf(Integer.class));
33+
expected.setType(type);
34+
String json = mapper.writeValueAsString(expected);
35+
I1230 actual = mapper.readValue(json, I1230.class);
36+
assertEquals(expected.getType(), actual.getType());
37+
}
38+
}

0 commit comments

Comments
 (0)