一、SpringBoot中Josn解析方案(SpringBoot系列)
2021-05-30 08:04
标签: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的依赖 除了上面的这种方式,我们能看到主要规定转换方式的类是ObjectMapper实现的,而ObjcetMapper是在 我们也可以通过只实现ObjectMapper的方式,在自定义转换方法,如下: 如果想使用FastJson的话,需要手动的注入FastJsonHttpMessageConverter 在使用雪花算法生成的id的时候发现,后端使用Long类型存储到前端js接收的时候,因为js使用Number类型接口,Number类型的长度是16位,而雪花算法生成的id是19位,会出现精度损失的问题。 解决方法: 后端的ID(Long) ==> Jackson(Long转String) ==> 前端使用String类型的ID,前端使用js string精度就不会丢失了。 后端(Long)接收前端数据(String)的时候,不用额外做处理,这是Spring反序列化参数接收默认支持的行为。 实际使用场景引用: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.html1. Springboot默认的json解析方案
2. 自定义JackJson-httpMessageConverter
@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;
}
}
JackSonAutoConfiger
中注入的,能发现ObjectMapper同MappintJack2HttpMessageConverter一样,如果没有自己注入,则自动注入一个。@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;
}
}
3. 自定义Gson-httpMessageConverter
@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();
}
}
3. 使用FastJson
@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;
}
}
4. 自定义HttpMesageConverter的真实使用场景
/**
* 这里使用的是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;
}
}
文章标题:一、SpringBoot中Josn解析方案(SpringBoot系列)
文章链接:http://soscw.com/index.php/essay/89472.html