簡體   English   中英

如何在我的 spring 啟動應用程序中使用 JSON 處理器而不是 jackson 或 gson?

[英]How can I use a JSON processor rather than jackson or gson in my spring boot application?

我想在我的 spring 啟動應用程序中使用像Genson這樣的 JSON 處理器。

當您使用JacksonGson時,由於這兩個庫的 spring 啟動自動配置,您會感到非常舒服。

在此鏈接中,有一個很好的指南,用於將Jackson替換為Gson

為了解決我的問題,我創建了gensongensonBuilder bean 但是我應該怎么做才能將這一行添加到我的配置中? spring.http.converters.preferred-json-mapper=genson

我是否需要做除上述以外的任何事情來用Genson庫替換Jackson

有 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM