[英]How can I use a JSON processor rather than jackson or gson in my spring boot application?
有 Spring 引導的指南:
1. 首先從您的 Spring 引導應用程序中排除 JACKSON
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- Exclude the default Jackson dependency -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
2.注冊轉換器和Genson class
Genson 有 HTTP 轉換器 Spring com.owlike.genson.ext.spring.GensonMessageConverter , Sources 。 如果 Spring 啟動應用程序只需使用此轉換器創建新的 bean。 它將自動應用。
請參閱在 Spring 引導中注冊自定義 MessageConverter
文檔
上下文中存在的任何 HttpMessageConverter bean 都將添加到轉換器列表中
@Bean
public Genson genson() {
return new GensonBuilder().setHtmlSafe(true).setSkipNull(true).useBeanViews(true).create();
}
@Bean
public com.owlike.genson.ext.spring.GensonMessageConverter gensonMessageConverter() {
return new com.owlike.genson.ext.spring.GensonMessageConverter(genson());
}
spring.http.converters.preferred-json-mapper=genson
不是必需的,只需刪除此配置即可。
要使用自定義, Spring
轉換庫默認不支持,您需要實現自己的AbstractJsonHttpMessageConverter
:
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
import org.springframework.http.converter.json.AbstractJsonHttpMessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import java.io.Reader;
import java.io.Writer;
import java.lang.reflect.Type;
public class GensonHttpMessageConverter extends AbstractJsonHttpMessageConverter {
private Genson genson;
public GensonHttpMessageConverter() {
this(new GensonBuilder()
.useIndentation(true)
.create());
}
public GensonHttpMessageConverter(Genson genson) {
Assert.notNull(genson, "A Genson instance is required");
this.genson = genson;
}
public void setGenson(Genson genson) {
Assert.notNull(genson, "A Genson instance is required");
this.genson = genson;
}
public Genson getGenson() {
return this.genson;
}
@Override
protected Object readInternal(Type resolvedType, Reader reader) {
return getGenson().deserializeInto(reader, resolvedType);
}
@Override
protected void writeInternal(Object object, @Nullable Type type, Writer writer) {
getGenson().serialize(object, writer);
}
}
之后你需要注冊它:
import com.example.genson.GensonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new GensonHttpMessageConverter());
}
}
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.