Browse Source

Make JsonObjectDecoder mandatory in JacksonJsonDecoder

pull/1111/head
Sebastien Deleuze 10 years ago
parent
commit
1f2fbba89b
  1. 11
      spring-web-reactive/src/main/java/org/springframework/core/codec/support/JacksonJsonDecoder.java
  2. 3
      spring-web-reactive/src/main/java/org/springframework/web/client/reactive/WebClient.java
  3. 3
      spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java
  4. 33
      spring-web-reactive/src/test/java/org/springframework/core/codec/support/JacksonJsonDecoderTests.java
  5. 3
      spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java
  6. 3
      spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java

11
spring-web-reactive/src/main/java/org/springframework/core/codec/support/JacksonJsonDecoder.java

@ -45,22 +45,17 @@ public class JacksonJsonDecoder extends AbstractDecoder<Object> { @@ -45,22 +45,17 @@ public class JacksonJsonDecoder extends AbstractDecoder<Object> {
private final ObjectMapper mapper;
private Decoder<DataBuffer> preProcessor;
private final Decoder<DataBuffer> preProcessor = new JsonObjectDecoder();
public JacksonJsonDecoder() {
this(new ObjectMapper(), null);
this(new ObjectMapper());
}
public JacksonJsonDecoder(Decoder<DataBuffer> preProcessor) {
this(new ObjectMapper(), preProcessor);
}
public JacksonJsonDecoder(ObjectMapper mapper, Decoder<DataBuffer> preProcessor) {
public JacksonJsonDecoder(ObjectMapper mapper) {
super(new MimeType("application", "json", StandardCharsets.UTF_8),
new MimeType("application", "*+json", StandardCharsets.UTF_8));
this.mapper = mapper;
this.preProcessor = preProcessor;
}
@Override

3
spring-web-reactive/src/main/java/org/springframework/web/client/reactive/WebClient.java

@ -28,7 +28,6 @@ import org.springframework.core.codec.support.ByteBufferDecoder; @@ -28,7 +28,6 @@ import org.springframework.core.codec.support.ByteBufferDecoder;
import org.springframework.core.codec.support.ByteBufferEncoder;
import org.springframework.core.codec.support.JacksonJsonDecoder;
import org.springframework.core.codec.support.JacksonJsonEncoder;
import org.springframework.core.codec.support.JsonObjectDecoder;
import org.springframework.core.codec.support.StringDecoder;
import org.springframework.core.codec.support.StringEncoder;
import org.springframework.http.HttpStatus;
@ -86,7 +85,7 @@ public final class WebClient { @@ -86,7 +85,7 @@ public final class WebClient {
this.messageEncoders = Arrays.asList(new ByteBufferEncoder(), new StringEncoder(),
new JacksonJsonEncoder());
this.messageDecoders = Arrays.asList(new ByteBufferDecoder(), new StringDecoder(),
new JacksonJsonDecoder(new JsonObjectDecoder()));
new JacksonJsonDecoder());
}
/**

3
spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java

@ -36,7 +36,6 @@ import org.springframework.core.codec.support.JacksonJsonDecoder; @@ -36,7 +36,6 @@ import org.springframework.core.codec.support.JacksonJsonDecoder;
import org.springframework.core.codec.support.JacksonJsonEncoder;
import org.springframework.core.codec.support.Jaxb2Decoder;
import org.springframework.core.codec.support.Jaxb2Encoder;
import org.springframework.core.codec.support.JsonObjectDecoder;
import org.springframework.core.codec.support.StringDecoder;
import org.springframework.core.codec.support.StringEncoder;
import org.springframework.core.convert.converter.Converter;
@ -251,7 +250,7 @@ public class WebReactiveConfiguration implements ApplicationContextAware { @@ -251,7 +250,7 @@ public class WebReactiveConfiguration implements ApplicationContextAware {
}
if (jackson2Present) {
JacksonJsonEncoder jacksonEncoder = new JacksonJsonEncoder();
JacksonJsonDecoder jacksonDecoder = new JacksonJsonDecoder(new JsonObjectDecoder());
JacksonJsonDecoder jacksonDecoder = new JacksonJsonDecoder();
converters.add(converter(jacksonEncoder, jacksonDecoder));
sseDataEncoders.add(jacksonEncoder);
} else {

33
spring-web-reactive/src/test/java/org/springframework/core/codec/support/JacksonJsonDecoderTests.java

@ -59,8 +59,8 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas @@ -59,8 +59,8 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas
}
@Test
@Ignore // Issues 112 (no generic type), otherwise works
public void decodeToListWithoutObjectDecoder() throws Exception {
@Ignore // Issue 109
public void decodeToList() throws Exception {
Flux<DataBuffer> source = Flux.just(stringBuffer(
"[{\"bar\":\"b1\",\"foo\":\"f1\"},{\"bar\":\"b2\",\"foo\":\"f2\"}]"));
@ -73,8 +73,7 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas @@ -73,8 +73,7 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas
}
@Test
@Ignore // Issue 109
public void decodeToFluxWithoutObjectDecoder() throws Exception {
public void decodeToFlux() throws Exception {
Flux<DataBuffer> source = Flux.just(stringBuffer(
"[{\"bar\":\"b1\",\"foo\":\"f1\"},{\"bar\":\"b2\",\"foo\":\"f2\"}]"));
@ -85,32 +84,6 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas @@ -85,32 +84,6 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas
assertValues(new Pojo("f1", "b1"), new Pojo("f2", "b2"));
}
@Test
@Ignore // Issue 109
public void decodeToListWithObjectDecoder() throws Exception {
Flux<DataBuffer> source = Flux.just(stringBuffer(
"[{\"bar\":\"b1\",\"foo\":\"f1\"},{\"bar\":\"b2\",\"foo\":\"f2\"}]"));
Method method = getClass().getDeclaredMethod("handle", List.class);
ResolvableType elementType = ResolvableType.forMethodParameter(method, 0);
Flux<Object> flux = new JacksonJsonDecoder(new JsonObjectDecoder()).decode(source, elementType, null);
TestSubscriber.subscribe(flux).assertNoError().assertComplete().
assertValues(Arrays.asList(new Pojo("f1", "b1"), new Pojo("f2", "b2")));
}
@Test
public void decodeToFluxWithObjectDecoder() throws Exception {
Flux<DataBuffer> source = Flux.just(stringBuffer(
"[{\"bar\":\"b1\",\"foo\":\"f1\"},{\"bar\":\"b2\",\"foo\":\"f2\"}]"));
ResolvableType elementType = ResolvableType.forClass(Pojo.class);
Flux<Object> flux = new JacksonJsonDecoder(new JsonObjectDecoder()).decode(source, elementType, null);
TestSubscriber.subscribe(flux).assertNoError().assertComplete().
assertValues(new Pojo("f1", "b1"), new Pojo("f2", "b2"));
}
@SuppressWarnings("unused")
void handle(List<Pojo> list) {
}

3
spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java

@ -44,7 +44,6 @@ import org.springframework.core.ParameterNameDiscoverer; @@ -44,7 +44,6 @@ import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.SynthesizingMethodParameter;
import org.springframework.core.codec.Decoder;
import org.springframework.core.codec.support.JacksonJsonDecoder;
import org.springframework.core.codec.support.JsonObjectDecoder;
import org.springframework.core.codec.support.StringDecoder;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.core.convert.support.ReactiveStreamsToCompletableFutureConverter;
@ -93,7 +92,7 @@ public class RequestBodyArgumentResolverTests { @@ -93,7 +92,7 @@ public class RequestBodyArgumentResolverTests {
@Before
public void setUp() throws Exception {
this.resolver = resolver(new JacksonJsonDecoder(new JsonObjectDecoder()));
this.resolver = resolver(new JacksonJsonDecoder());
this.request = new MockServerHttpRequest(HttpMethod.GET, new URI("/path"));
MockServerHttpResponse response = new MockServerHttpResponse();
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();

3
spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java

@ -33,7 +33,6 @@ import org.springframework.core.codec.Encoder; @@ -33,7 +33,6 @@ import org.springframework.core.codec.Encoder;
import org.springframework.core.codec.support.ByteBufferDecoder;
import org.springframework.core.codec.support.JacksonJsonDecoder;
import org.springframework.core.codec.support.JacksonJsonEncoder;
import org.springframework.core.codec.support.JsonObjectDecoder;
import org.springframework.core.codec.support.StringDecoder;
import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ReactorHttpClientRequestFactory;
@ -69,7 +68,7 @@ public class SseIntegrationTests extends AbstractHttpHandlerIntegrationTests { @@ -69,7 +68,7 @@ public class SseIntegrationTests extends AbstractHttpHandlerIntegrationTests {
this.webClient.setMessageDecoders(Arrays.asList(
new ByteBufferDecoder(),
new StringDecoder(false),
new JacksonJsonDecoder(new JsonObjectDecoder())));
new JacksonJsonDecoder()));
}
@Override

Loading…
Cancel
Save