Browse Source

Always invoke Jackson serialization with AtomicReference cause

Issue: SPR-15760
pull/1476/head
Juergen Hoeller 9 years ago
parent
commit
5f767a86f5
  1. 6
      spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java
  2. 30
      spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java

6
spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java

@ -146,9 +146,6 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
return false; return false;
} }
JavaType javaType = this.objectMapper.constructType(targetClass); JavaType javaType = this.objectMapper.constructType(targetClass);
if (!logger.isWarnEnabled()) {
return this.objectMapper.canDeserialize(javaType);
}
AtomicReference<Throwable> causeRef = new AtomicReference<>(); AtomicReference<Throwable> causeRef = new AtomicReference<>();
if (this.objectMapper.canDeserialize(javaType, causeRef)) { if (this.objectMapper.canDeserialize(javaType, causeRef)) {
return true; return true;
@ -162,9 +159,6 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
if (!supportsMimeType(headers)) { if (!supportsMimeType(headers)) {
return false; return false;
} }
if (!logger.isWarnEnabled()) {
return this.objectMapper.canSerialize(payload.getClass());
}
AtomicReference<Throwable> causeRef = new AtomicReference<>(); AtomicReference<Throwable> causeRef = new AtomicReference<>();
if (this.objectMapper.canSerialize(payload.getClass(), causeRef)) { if (this.objectMapper.canSerialize(payload.getClass(), causeRef)) {
return true; return true;

30
spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java

@ -20,6 +20,8 @@ import java.io.IOException;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonEncoding;
@ -79,25 +81,21 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper) { protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper) {
init(objectMapper); this.objectMapper = objectMapper;
setDefaultCharset(DEFAULT_CHARSET);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentObjectsWith(new DefaultIndenter(" ", "\ndata:"));
this.ssePrettyPrinter = prettyPrinter;
} }
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType) { protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType) {
super(supportedMediaType); this(objectMapper);
init(objectMapper); setSupportedMediaTypes(Collections.singletonList(supportedMediaType));
} }
protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes) { protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes) {
super(supportedMediaTypes); this(objectMapper);
init(objectMapper); setSupportedMediaTypes(Arrays.asList(supportedMediaTypes));
}
protected void init(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
setDefaultCharset(DEFAULT_CHARSET);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentObjectsWith(new DefaultIndenter(" ", "\ndata:"));
this.ssePrettyPrinter = prettyPrinter;
} }
@ -158,9 +156,6 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
return false; return false;
} }
JavaType javaType = getJavaType(type, contextClass); JavaType javaType = getJavaType(type, contextClass);
if (!logger.isWarnEnabled()) {
return this.objectMapper.canDeserialize(javaType);
}
AtomicReference<Throwable> causeRef = new AtomicReference<>(); AtomicReference<Throwable> causeRef = new AtomicReference<>();
if (this.objectMapper.canDeserialize(javaType, causeRef)) { if (this.objectMapper.canDeserialize(javaType, causeRef)) {
return true; return true;
@ -174,9 +169,6 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
if (!canWrite(mediaType)) { if (!canWrite(mediaType)) {
return false; return false;
} }
if (!logger.isWarnEnabled()) {
return this.objectMapper.canSerialize(clazz);
}
AtomicReference<Throwable> causeRef = new AtomicReference<>(); AtomicReference<Throwable> causeRef = new AtomicReference<>();
if (this.objectMapper.canSerialize(clazz, causeRef)) { if (this.objectMapper.canSerialize(clazz, causeRef)) {
return true; return true;

Loading…
Cancel
Save