我想在spring boot应用程序中使用像Genson这样的JSON处理器。
当您使用Jackson
或Gson
时,由于这两个库的Spring引导自动配置,您非常舒适。
在这个链接中,有一个很好的指南,可以将Jackson
替换为Gson
。
为了解决我的问题,我创建了genson
和gensonBuilder
bean但是我应该怎么做才能将这行添加到我的配置中呢?spring.http.converters.preferred-json-mapper=genson
我需要做除上述之外的任何事情来用Genson
库替换Jackson
吗?
要使用自定义的,默认情况下不支持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靴有一个指南:
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的扩展名: