package com.qianwen.core.tool.jackson;
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.databind.Module;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import java.io.IOException;
|
import java.lang.reflect.Type;
|
import java.nio.charset.Charset;
|
import java.util.ArrayList;
|
import java.util.List;
|
import com.qianwen.core.tool.jackson.BladeBeanSerializerModifier;
|
import com.qianwen.core.tool.utils.Charsets;
|
import org.springframework.http.HttpOutputMessage;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.converter.HttpMessageNotWritableException;
|
import org.springframework.lang.NonNull;
|
import org.springframework.lang.Nullable;
|
import org.springframework.util.StreamUtils;
|
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/jackson/MappingApiJackson2HttpMessageConverter.class */
|
public class MappingApiJackson2HttpMessageConverter extends AbstractReadWriteJackson2HttpMessageConverter {
|
@Nullable
|
private String jsonPrefix;
|
|
public MappingApiJackson2HttpMessageConverter(ObjectMapper objectMapper, BladeJacksonProperties properties) {
|
super(objectMapper, initWriteObjectMapper(objectMapper, properties), initMediaType(properties));
|
}
|
|
private static List<MediaType> initMediaType(BladeJacksonProperties properties) {
|
List<MediaType> supportedMediaTypes = new ArrayList<>();
|
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
|
supportedMediaTypes.add(new MediaType("application", "*+json"));
|
if (Boolean.TRUE.equals(properties.getSupportTextPlain())) {
|
supportedMediaTypes.add(MediaType.TEXT_PLAIN);
|
}
|
return supportedMediaTypes;
|
}
|
|
private static ObjectMapper initWriteObjectMapper(ObjectMapper readObjectMapper, BladeJacksonProperties properties) {
|
ObjectMapper writeObjectMapper = readObjectMapper.copy();
|
if (Boolean.TRUE.equals(properties.getBigNumToString())) {
|
writeObjectMapper.registerModules(new Module[]{BladeNumberModule.INSTANCE});
|
}
|
if (Boolean.TRUE.equals(properties.getNullToEmpty())) {
|
writeObjectMapper.setSerializerFactory(writeObjectMapper.getSerializerFactory().withSerializerModifier(new BladeBeanSerializerModifier()));
|
writeObjectMapper.getSerializerProvider().setNullValueSerializer(BladeBeanSerializerModifier.NullJsonSerializers.STRING_JSON_SERIALIZER);
|
}
|
return writeObjectMapper;
|
}
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
@Override // org.springblade.core.tool.jackson.AbstractReadWriteJackson2HttpMessageConverter
|
public void writeInternal(@NonNull Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
|
if (object instanceof String) {
|
Charset defaultCharset = getDefaultCharset();
|
Charset charset = defaultCharset == null ? Charsets.UTF_8 : defaultCharset;
|
StreamUtils.copy((String) object, charset, outputMessage.getBody());
|
return;
|
}
|
super.writeInternal(object, type, outputMessage);
|
}
|
|
public void setJsonPrefix(@Nullable String jsonPrefix) {
|
this.jsonPrefix = jsonPrefix;
|
}
|
|
public void setPrefixJson(boolean prefixJson) {
|
this.jsonPrefix = prefixJson ? ")]}', " : null;
|
}
|
|
protected void writePrefix(@NonNull JsonGenerator generator, @NonNull Object object) throws IOException {
|
if (this.jsonPrefix != null) {
|
generator.writeRaw(this.jsonPrefix);
|
}
|
}
|
}
|