Browse Source

Handle nested w/o top-level array in Jackson2JsonTokenizer

Issue: SPR-15803
pull/1484/head
Rossen Stoyanchev 9 years ago
parent
commit
14ccb38523
  1. 4
      spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java
  2. 9
      spring-web/src/test/java/org/springframework/http/codec/json/Jackson2TokenizerTests.java

4
spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java

@ -152,8 +152,8 @@ class Jackson2Tokenizer implements Function<DataBuffer, Flux<TokenBuffer>> { @@ -152,8 +152,8 @@ class Jackson2Tokenizer implements Function<DataBuffer, Flux<TokenBuffer>> {
}
private boolean isTopLevelArrayToken(JsonToken token) {
return (token == JsonToken.START_ARRAY && this.arrayDepth == 1) ||
(token == JsonToken.END_ARRAY && this.arrayDepth == 0);
return this.objectDepth == 0 && ((token == JsonToken.START_ARRAY && this.arrayDepth == 1) ||
(token == JsonToken.END_ARRAY && this.arrayDepth == 0));
}
public void endOfInput() {

9
spring-web/src/test/java/org/springframework/http/codec/json/Jackson2TokenizerTests.java

@ -57,7 +57,7 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase @@ -57,7 +57,7 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase
}
@Test
public void noTokenizeArrayElements() {
public void doNotTokenizeArrayElements() {
this.tokenizer = new Jackson2Tokenizer(this.jsonParser, false);
testTokenize(
@ -116,7 +116,7 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase @@ -116,7 +116,7 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase
asList("{\"foo\": \"bar\"}",
"{\"foo\": \"baz\"}"));
// SPR-15803
// SPR-15803: nested array
testTokenize(
singletonList("[" +
"{\"id\":\"0\",\"start\":[-999999999,1,1],\"end\":[999999999,12,31]}," +
@ -129,6 +129,11 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase @@ -129,6 +129,11 @@ public class Jackson2TokenizerTests extends AbstractDataBufferAllocatingTestCase
"{\"id\":\"2\",\"start\":[-999999999,1,1],\"end\":[999999999,12,31]}")
);
// SPR-15803: nested array, no top-level array
testTokenize(
singletonList("{\"speakerIds\":[\"tastapod\"],\"language\":\"ENGLISH\"}"),
singletonList("{\"speakerIds\":[\"tastapod\"],\"language\":\"ENGLISH\"}"));
testTokenize(
asList("[{\"foo\": \"foofoo\", \"bar\"",
": \"barbar\"},{\"foo\": \"foofoofoo\", \"bar\": \"barbarbar\"}]"),

Loading…
Cancel
Save