Jackson encoder and decoder should use provided mime types

Instead of always using the default JSON mime types
This commit is contained in:
rlindooren
2017-08-16 12:34:02 +02:00
committed by Rossen Stoyanchev
parent 645e3492db
commit 5b29555d88
5 changed files with 43 additions and 4 deletions

View File

@@ -16,12 +16,13 @@
package org.springframework.http.codec.json;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.util.MimeType;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@@ -63,6 +64,21 @@ public class Jackson2JsonDecoderTests extends AbstractDataBufferAllocatingTestCa
assertFalse(decoder.canDecode(forClass(Pojo.class), APPLICATION_XML));
}
@Test(expected = UnsupportedOperationException.class)
public void canDecodeWithProvidedMimeType() {
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(new ObjectMapper(), textJavascript);
assertEquals(1, decoder.getDecodableMimeTypes().size());
assertTrue(decoder.getDecodableMimeTypes().contains(textJavascript));
assertTrue(decoder.canDecode(forClass(Pojo.class), textJavascript));
assertFalse(decoder.canDecode(forClass(Pojo.class), APPLICATION_JSON));
// Validate immutability of mime types list
decoder.getMimeTypes().add(new MimeType("text", "ecmascript"));
assertEquals(1, decoder.getDecodableMimeTypes().size());
}
@Test
public void decodePojo() throws Exception {
Flux<DataBuffer> source = Flux.just(stringBuffer("{\"foo\": \"foofoo\", \"bar\": \"barbar\"}"));

View File

@@ -16,16 +16,20 @@
package org.springframework.http.codec.json;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import static java.util.Collections.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.springframework.http.MediaType.*;
import static org.springframework.http.codec.json.Jackson2JsonEncoder.*;
import static org.springframework.http.codec.json.JacksonViewBean.*;
import org.springframework.util.MimeType;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@@ -58,6 +62,21 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
assertTrue(this.encoder.canEncode(ResolvableType.NONE, null));
}
@Test(expected = UnsupportedOperationException.class)
public void canEncodeWithCustomMimeType() {
ResolvableType pojoType = ResolvableType.forClass(Pojo.class);
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(new ObjectMapper(), textJavascript);
assertEquals(1, encoder.getEncodableMimeTypes().size());
assertTrue(encoder.getEncodableMimeTypes().contains(textJavascript));
assertTrue(encoder.canEncode(pojoType, textJavascript));
// Validate immutability of mime types list
encoder.getMimeTypes().add(new MimeType("text", "ecmascript"));
assertEquals(1, encoder.getEncodableMimeTypes().size());
}
@Test
public void canNotEncode() {
assertFalse(this.encoder.canEncode(ResolvableType.forClass(String.class), null));