我一直在尝试在 RestComponent 中添加我的 Version 类的自定义序列化:
public class Version {
public int MAJOR;
public int MINOR;
public int REVISION;
public Integer BUILD;
}
我期望的 Json 输出:
"1.2.2"
不是
{
"MAJOR": 1,"MINOR": 2,"REVISION": 2,"BUILD": null
}
所以我决定使用 JsonSerializer 和 JsonDeserializer 接口,也尝试了 TypeAdapter。 我在我的 MVC 配置类中创建了一个 Gson Bean,也尝试创建了 GsonBuilder bean。在应用程序属性中,我选择 gson 作为序列化器,并删除了 Jackson 依赖项。
@Bean
public Gson gson() {
var strategy = new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getannotation(GsonExclude.class) != null;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
};
return new GsonBuilder()
.registerTypeHierarchyAdapter(Version.class,new VersionGsonAdapter())
.addSerializationExclusionStrategy(strategy)
.addDeserializationExclusionStrategy(strategy)
.disableHtmlEscaping()
.serializeNulls()
.setPrettyPrinting()
.create();
}
排除策略和漂亮打印等所有其他设置都可以正常工作,但键入 adpapters - 不是。
我也尝试过配置消息转换器(configureMessageConverters、extendMessageConverters):
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(c -> c instanceof GsonHttpMessageConverter);
converters.add(new GsonHttpMessageConverter(gson()));
}
}