1. @Configuration
  2. @EnableWebMvc
  3. public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
  4. /**
  5. * fastjson configuration
  6. */
  7. @Override
  8. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  9. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  10. FastJsonConfig config = new FastJsonConfig();
  11. config.setSerializerFeatures(SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
  12. config.setSerializeFilters((ValueFilter) (object, name, value) -> {
  13. // 针对map类型value为null时输出""
  14. if (Objects.isNull(value)) {
  15. return "";
  16. }
  17. // 数字类型转字符串
  18. if (value instanceof Number) {
  19. return value.toString();
  20. }
  21. return value;
  22. });
  23. ArrayList<MediaType> mediaTypes = Lists.newArrayList();
  24. mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
  25. mediaTypes.add(MediaType.TEXT_HTML);
  26. mediaTypes.add(MediaType.APPLICATION_JSON);
  27. mediaTypes.add(MediaType.TEXT_PLAIN);
  28. converter.setSupportedMediaTypes(mediaTypes);
  29. converter.setFastJsonConfig(config);
  30. // 自定义序列化
  31. config.getSerializeConfig().put(Response.class, new ResponseSerializer(config));
  32. converters.add(converter);
  33. }
  34. }

自定义序列化实现ObjectSerializer 接口

  1. public static class ResponseSerializer implements ObjectSerializer {
  2. private final FastJsonConfig fastJsonConfig;
  3. public ResponseSerializer(FastJsonConfig fastJsonConfig) {
  4. this.fastJsonConfig = fastJsonConfig;
  5. }
  6. @Override
  7. public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
  8. SerializeWriter out = serializer.getWriter();
  9. Response response = (Response) object;
  10. out.write(JSON.toJSONString(response.body, fastJsonConfig.getSerializeConfig(), fastJsonConfig.getSerializeFilters(), fastJsonConfig.getSerializerFeatures()));
  11. }
  12. }

jsonp注解支持

fastjson已经内置了一个ResponseBodyAdvice接口的实现JSONPResponseBodyAdvice

我们只需要配置这个Bean就行了

  1. @Configuration
  2. @EnableWebMvc
  3. public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
  4. /**
  5. * use {@link ResponseJSONP}
  6. * controller return jsonp data
  7. */
  8. @Bean
  9. public ResponseBodyAdvice fastJsonpResponseBodyAdvice() {
  10. return new JSONPResponseBodyAdvice();
  11. }
  12. }

springboot集成fastjson的更多相关文章

  1. springboot:集成fastjson(教训)

    网上有很多介绍,主要有两种. 1.在启动类中注入bean /** * 集成fastjson * * @return */ @Bean public HttpMessageConverters fast ...

  2. 基于Springboot集成security、oauth2实现认证鉴权、资源管理

    1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...

  3. springboot集成elasticsearch

    在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...

  4. SpringBoot集成JWT 实现接口权限认证

    JWT介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的, 特别适用于分布式站点 ...

  5. springboot集成Kafka

    kafka和MQ的区别: 1)在架构模型方面, RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding ...

  6. springboot集成实现秒杀

    springboot集成开发实现商场秒杀 加入主要依赖 <dependency> <groupId>org.springframework.boot</groupId&g ...

  7. SpringBoot 集成ehcache

    1, 项目实在springboot 集成mybatis 的基础上的: https://www.cnblogs.com/pickKnow/p/11189729.html 2,pom 如下,有的不需要加, ...

  8. ElasticSearch基础学习(SpringBoot集成ES)

    一.概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎. 它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服 ...

  9. 国产时序数据库IotDB安装、与SpringBoot集成

    一.简介: 本文将完成一个真实业务中的设备上报数据的一个例子,完整的展示后台服务接收到设备上报的数据后,将数据添加到时序数据库,并且将数据查询出来的一个例子.本文所有代码已经上传GitHub:http ...

随机推荐

  1. HDU 2809 God of War (状压DP)

    God of War Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Excel透视表进阶之排序、筛选、分组、总计与分类汇总

    排序 自动排序 升序: 数字(从小到大) 日期(日期越早越靠小) 英文(按照A-Z) 中文(按照拼音的A-Z) 手动排序 通过鼠标的拖拽来完成手动排序 通过快捷菜单的方式:右击-移动 依据其他字段进行 ...

  3. Java 读取Json文件内容

    读取json文件为String类型: import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logge ...

  4. Radio Button误区

    在同一个父容器下,Radio Button控件默认只能选择一个,所以无需多余代码管控 如果将Radio Button的多个子对象存入NSArray列表,发现长度为0(巨坑),因此通过列表对其初始化不可 ...

  5. Python进阶编程 反射

    1.7反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) class Foo: f = '类的静态变量' def __init_ ...

  6. luogu P1758 [NOI2009]管道取珠

    luogu 这个题中的平方有点东西,考虑他的组合意义,也就是做这个过程两次,如果两次得到的结果一样就给答案+1,所以可以考虑dp,设\(f_{i,j,k,l}\)表示第一个过程中上面取到的第\(i\) ...

  7. api接口统一封装

    具体的接口api模块,例如authorization.js import axios from '../axiosWrapper' let prefix = process.env.API_ROOT ...

  8. vue实现轮播图

    /* Start  基本样式*/ * {   margin: 0;   padding: 0; } ul {   list-style-type: none; } body {   font-size ...

  9. Java 迪杰斯特拉算法实现查找最短距离

    迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...

  10. Scala Partial Function从官方文档解析

    A partial function of type PartialFunction[A, B] is a unary function where the domain does not neces ...