当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot应用程序中使用JSON处理器而不是jackson或gson?

阎丰
2023-03-14

我想在spring boot应用程序中使用像Genson这样的JSON处理器。

当您使用JacksonGson时,由于这两个库的Spring引导自动配置,您非常舒适。

在这个链接中,有一个很好的指南,可以将Jackson替换为Gson

为了解决我的问题,我创建了gensongensonBuilderbean但是我应该怎么做才能将这行添加到我的配置中呢?spring.http.converters.preferred-json-mapper=genson

我需要做除上述之外的任何事情来用Genson库替换Jackson吗?

共有2个答案

施玉宸
2023-03-14

要使用自定义的,默认情况下不支持Spring转换库,您需要实现自己的AbstractJsonHttpMessageConader

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());
    }
}

另见:

  • 使用Spring框架的Http消息转换器
龚凯泽
2023-03-14

Spring靴有一个指南:
1。首先,将JACKSON从Spring Boot应用程序中排除

        <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类
Genson拥有Spring com的HTTP转换器。猫头鹰似的。詹森。外景:Spring。GensonMessageConverter,来源。以防Spring启动应用程序使用此转换器创建新bean。它将自动应用
请参阅Spring Boot文档中的注册自定义MessageConverter
部分

上下文中存在的任何HttpMessageConvertbean都将被添加到转换器列表中

    @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。转换器。首选json mapper=genson不是必需的,只需删除此配置即可。

 类似资料:
  • 问题内容: 我已经看过很多关于此的文章和SO问题-但我只是没有使它起作用。我的目标是在JavaEE应用程序中将Jackson用作JSON处理器。到目前为止我有什么? pom.xml 要么这个 问题答案: 我的猜测是您使用的是Glassfish,它使用MOXy作为其默认JSON提供程序。您可以使用禁用它。 该具有自动发现功能,它应该自动注册。对于Glassfish,我不确定自动发现功能,以及它在内部

  • 我有一个带post请求的控制器。我试图用一个简单的NotNull注释验证POJO。我正在使用ControllerAdvice来处理异常。 所以我尝试使用它,但当我启动应用程序时,我得到了以下信息: 因此,我想为BindException创建自己的处理程序,但当我为BindException类创建ExceptionHandler时,spring应用程序不会启动。如果我注释掉handleBindExc

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource:

  • 问题内容: 我正在读取Gson的JSON响应,该响应返回somtimes a,因为期望值设置为空字符串。现在,我想知道处理这种异常的最佳方法是什么。如果该值为空字符串,则反序列化应为0。 预期的JSON响应: 但是有时运行时是一个空字符串: java类如下所示: 反序列化是这样的: 因为返回一个空String而不是一个int值,所以抛出a 。 有没有办法告诉Gson:“ 如果反序列化Type 的字

  • 问题内容: 我有看起来像这样的XML: 我想使用JAXB进行阅读。 我知道我能做 如果XML看起来像 ,但是我对上面的XML布局怎么办? 问题答案: 注意: 我是EclipseLink JAXB(MOXy)的负责人,并且是JAXB 2.X(JSR-222)专家组的成员。 您可以在此用例中使用MOXy的扩展名: