一,Json处理组件

    常见的 Json 处理组件有下面几个:

    通过查看教程基础使用,再结合部分简单源码学习,掌握起来不是什么问题。

二,Spring boot 中使用 Json 处理组件

1,配置 jackson

    spring boot 采用 HttpMessageConverters 类对 http 过程中的 json 数据进行转换,默认使用的 json 组件是 jackson,相关说明请参考spring文档.通过 jackson 文档我们知道,使用 jackson 进行 json 数据处理需要先获取 ObjectMapper 对象,而在 spring boot 中默认已经注入了该对象,并且加入了一些默认设置,通过 spring文档 我们也知道,这些设置可以通过使用相应的配置项进行覆盖。spring boot 中的全部配置项请参考 spring 配置项文档

    如果想注入自己的 ObjectMapper 对象,则可以在配置类中通过 @Bean 和 @Primary 来覆盖默认的 ObjectMapper 对象并且加入自定义的配置.简单示例代码如下:

@Configuration
public class DemoConfig {

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        //自定义配置
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        return objectMapper;
    }
}

 

2,使用其它 json 组件

    可以通过配置来使用其它的 json 组件而不是使用默认的 jackson,下面以使用 fastjson 为例,说明配置方法。

@Configuration
public class DemoConfig {

    @Bean
    public HttpMessageConverters customConverters() {
        //配置  HttpMessageConverters 类,可以有多个
        return new HttpMessageConverters(false, Collections.singletonList(new DemoHttpMessageConverter()));
    }
    
    public class DemoHttpMessageConverter implements HttpMessageConverter {
        @Override
        public boolean canRead(Class aClass, MediaType mediaType) {
            return true;
        }

        @Override
        public boolean canWrite(Class aClass, MediaType mediaType) {
            return true;
        }

        @Override
        public List<MediaType> getSupportedMediaTypes() {
            List<MediaType> mediaTypes = new ArrayList<>();
            mediaTypes.add(MediaType.APPLICATION_JSON);
            mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            return mediaTypes;
        }

        @Override
        public Object read(Class aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
            //这里使用 json 组件对 http request 中的 json 数据做处理
            return null;
        }

        @Override
        public void write(Object o, MediaType mediaType, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {
            //设置响应字符集
            httpOutputMessage.getHeaders().set("content-type", "application/json; charset=utf-8");
            //使用 fastjson JSON 对象将 Oject 转成 String 并输出
            httpOutputMessage.getBody().write(JSON.toJSON(o).toString().getBytes());
        }
    }
}

    前提记得在 pom 文件中引入 json 组件依赖,像这里需要引入 fastjson 的依赖。


3,补充说明

    在实际生产环境中,我们通常都直接使用 jackson 作为 http 的 json 处理组件,对于其它场景需要,则可以同时引入其它 json 组件,并且在项目中配置成单例工具类方便使用,实际使用还是要熟练掌握对应的 json 组件类,spring boot 中的使用则相对较简单。