标签:nconf mesa ber ima 方法 add 序列 ora 全局配置
Springboot中已经集成JackJson
springboot在Controller层加上@RestController注解后,就可以接收、返回 json数据的原因是:
HttpMessageConverter,这是一个消息转换工具,有两个功能:
SpringMVC自动配置了JackJson和Gson的HttpMessageConterver,所以如果用的是这两个json框架,不需要额外配置,只需要把依赖添加上。
JackJson由SpringBoot已经集成了,若想使用Gson,需要将SpringBoot-starer-web中引入的JackJson的依赖排除掉,再引入Gson的依赖
@Configuration
public class JsonConfig {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter( ) {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
return mappingJackson2HttpMessageConverter;
}
}
除了上面的这种方式,我们能看到主要规定转换方式的类是ObjectMapper实现的,而ObjcetMapper是在JackSonAutoConfiger
中注入的,能发现ObjectMapper同MappintJack2HttpMessageConverter一样,如果没有自己注入,则自动注入一个。
我们也可以通过只实现ObjectMapper的方式,在自定义转换方法,如下:
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
return objectMapper;
}
}
@Configuration
public class JacksonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(new GonBuilder().setDateFormart("yyyy/MM/dd").create())
return converter;
}
}
@Configuration
public class JacksonConfig {
@Bean
Gson gsonHttpMessageConverter(){
return new GonBuilder().setDateFormart("yyyy/MM/dd").create();
}
}
如果想使用FastJson的话,需要手动的注入FastJsonHttpMessageConverter
@Configuration
public class JacksonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormart("yyyy/MM/dd");
converter.setFastJsonConfig(config);
return converter;
}
}
在使用雪花算法生成的id的时候发现,后端使用Long类型存储到前端js接收的时候,因为js使用Number类型接口,Number类型的长度是16位,而雪花算法生成的id是19位,会出现精度损失的问题。
解决方法:
后端的ID(Long) ==> Jackson(Long转String) ==> 前端使用String类型的ID,前端使用js string精度就不会丢失了。
后端(Long)接收前端数据(String)的时候,不用额外做处理,这是Spring反序列化参数接收默认支持的行为。
/**
* 这里使用的是JackJson,使用其他json框架的,可以以此类推
*/
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
{
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 全局配置序列化返回 JSON 处理
SimpleModule simpleModule = new SimpleModule();
//JSON Long ==> String
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
实际使用场景引用:https://www.cnblogs.com/zimug/archive/2020/08/25/13557662.html
一、SpringBoot中Josn解析方案(SpringBoot系列)
标签:nconf mesa ber ima 方法 add 序列 ora 全局配置
原文地址:https://www.cnblogs.com/zhaoyuan72/p/14755523.html