springboot jackson配置教程

目录
  • springboot jackson配置
    • 需求
    • 全局配置
    • 额外
    • 测试
  • springboot配置jackSon处理字段
    • javaBean序列化为json
    • jackson处理相关自动

springboot jackson配置

项目中使用的json是jackson。这个呢是spring boot自带的,一开始是用阿里的fastjson的。但是 总是有漏洞。还是用jackson,谷歌的gson也感觉非常棒。

需求

在controller 使用@RestController 返回json。使用的是 jackson。在处理BigDecimal的时候,想去掉 小数点后面的 00,例如 280.00.

全局配置

这种需求 肯定是全局配置一下了。看了一下文档,配置一下,感觉还可以 写一下吧。

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.json.JsonReadFeature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * @Author: plani
 * 创建时间: 2020/9/22 9:41
 */
@Configuration
public class JacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper()
    {
        JsonMapper.Builder builder = JsonMapper.builder();
        // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
        // Include.Include.ALWAYS 默认
        // Include.NON_DEFAULT 属性为默认值不序列化
        // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
        // Include.NON_NULL 属性为NULL 不序列化
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
        //有未知属性 要不要抛异常
        builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        //是否允许JSON字符串包含未转义的控制字符(值小于32的ASCII字符,包括制表符和换行符)的特性。如果feature设置为false,则在遇到这样的字符时抛出异常。
        builder.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS, true);
        //确定解析器是否允许使用单引号(撇号,字符'\ ")引用字符串(名称和字符串值)的特性。如果是,这是除了其他可接受的标记。但不是JSON规范)。
        builder.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
        JsonMapper jsonMapper = builder.build();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        //添加 序列器  这里是对 BigDecimal 类型处理,这是关键代码
        javaTimeModule.addSerializer(BigDecimal.class, new JsonSerializer<BigDecimal>() {
            @Override
            public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                DecimalFormat fnum = new DecimalFormat("#.##");
                //把 这个BigDecimal 属性对应的值,写成 String 类型
                gen.writeString(fnum.format(value));
            }
        });
        //处理 时间格式
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        //注册
        jsonMapper.registerModule(javaTimeModule);
        return jsonMapper;
    }
}

上面最重要的 就是 addSerializer 这个方法,用来处理对应类型的 转化。注释的很清楚,看不懂的可以留言问我。

额外

网上有好多上面是ObjectMapper 这个进行设置,这个呢里面有不少是 标记过时的。 所以 我用了JsonMapper

测试

写一个 controller 方法,返回含有BigDecimal的类,来测试一下

   @PostMapping("test")
    public Map test() {
        Map<String, Object> map = new HashMap<>();
        BigDecimal bigDecimal = new BigDecimal("280.00");
        map.put("one", bigDecimal);
        return map;
    }

用postman测试一下

可以看见 280.00 被转成了 280。 好了,研究我的深度学习去了

springboot配置jackSon处理字段

常用框架:阿里,fastjson,谷歌,gson等。

javaBean序列化为json

① 性能:Jackson > Fastjson > Gson > Json-lib同个结构

② Jackson、Fastjson、Gson 类库各有特点,各有自己的专长

③ 空间换时间,时间换空间

jackson处理相关自动

① 指定字段不返回:@jsonIgnore(主要用于密码,让密码不显示,加在字段上面)

② 指定日期格式:@JsonFormat(pattern = “yyyy-MM-dd hh:mm:ss”,locale = “zh”,timezone = “GMT+8”)

③ 空字段不返回:@JsonInclude(JsonInclude.Include.NON_NULL)

③ 指定别名:@JsonProperty(“create_time”)

开发功能:视频创建时候返回自定义格式,过滤用户敏感信息。

 private int price;
    @JsonProperty("cover_img")
    private String coverImg;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "zh",timezone = "GMT+8")
    @JsonProperty("create_time")
    private Date createTime;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private List<Chapter> chapterList;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解springboot之jackson的两种配置方式

    springboot 针对jackson是自动化配置的,如果需要修改,有两种方式: 方式一:通过application.yml 配置属性说明:## spring.jackson.date-format指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名 spring.jackson.deserialization是否开启Jackson的反序列化 spring.jackson.generator是否开启json的generators. spring.jackson

  • SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

    网上杂七杂八的说法不一,大多数都是抄来抄去,没有实践,近期在项目频繁遇到boot+jackson处理日期的问题,故开此贴. 首先是POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

  • springboot配置Jackson返回统一默认值的实现示例

    在项目开发中,我们返回的数据或者对象没有的时候一般直接返回的null 有数据时的返回值 { "flag": true, "code": "10000", "msg": "成功!", "data": { "id": 32, "templateType": 1, "templateName": "我的测试模板1"

  • springboot jackson配置教程

    目录 springboot jackson配置 需求 全局配置 额外 测试 springboot配置jackSon处理字段 javaBean序列化为json jackson处理相关自动 springboot jackson配置 项目中使用的json是jackson.这个呢是spring boot自带的,一开始是用阿里的fastjson的.但是 总是有漏洞.还是用jackson,谷歌的gson也感觉非常棒. 需求 在controller 使用@RestController 返回json.使用的是

  • intellij IDEA配置springboot的图文教程

    IntelliJ IDEA 简介 IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具(git.svn.github等).JUnit.CVS整合.代码分析. 创新的GUI设计等方面的功能可以说是超常的.IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主.它的旗舰版本还支持HTML,CSS,

  • springboot 多环境配置教程

    在上一课中我们通过idea工具没有做任何配置就构建了一个springboot项目,并且已经成功启动了,但我们都很清楚这些都远远不能达到我们实际项目的需求,比如我们要引入我们自己的redis配置.mysql配置等,应该如何处理呢?在spring mvc中我们都是通过spring.xml相关文件配置,在springboot中这些都已经不存在了,我们应该怎样配置呢?别急,马上为大家揭晓谜底,跟着我一起来吧! NO1.我们在做项目的时候是不是都会区分很多环境呢?比如开发环境.测试环境.生产环境等,那么第

  • IDEA SpringBoot 项目配置Swagger2的详细教程

    原先前后端分离的api文档开启了前后端相互撕逼的对接之路 api更新不及时导致对接失败,以及存在测试不够方便,而swagger则很好的解决了这个问题 在项目中也经常用到swagger2,于是动手记录一下swagger2配置过程,希望能带来一点帮助. 在SpringBoot项目当中使用Swagger主要分为以下几步: 1.SpringBoot-web项目并添加pom.xml依赖 2.编写HelloController,测试成功运行 3.创建一个SwaggerConfig类,配置swagger-ui

  • SpringBoot多环境配置教程详解

    目录 一.为什么要配置多环境 二.如何进行多环境配置呢 1.针对 yaml 配置文件 2.针对 properties 配置文件 三.命令行启动参数 第一步:打包项目 第二步:输入命令行 补充内容 一.为什么要配置多环境 当我们工作开发真实的项目时,可能会遇到不同的环境,如:开发环境.生产环境.测试环境等,不同的环境所需要的配置内容也会不尽相同,如果我们每次切换环境时再去配置对应的环境配置,肯定会降低我们的开发效率,所以,掌握多环境配置还是非常有必要的. 二.如何进行多环境配置呢 我们还是以配置端

  • 全面解析SpringBoot自动配置的实现原理

    之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功能,大概的总结一下. 一,配置属性类 其实就是值对象注入的方式去配置一些Spring常用的配置,我们编写一个最简单的配置对象. @ConfigurationProperties(prefix = "hello") //@Component //如果这

  • Springboot整合Dubbo教程之项目创建和环境搭建

    本文介绍了Springboot整合Dubbo教程之项目创建和环境搭建,分享给大家,具体如下: 1. 使用IDEA新建一个Maven项目 新建项目 选择Maven后,点击next下一步 选择项目类型 配置项目的Maven坐标 设置项目名称和保存位置 修改项目的pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM

  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个dao接口继承一个类,在启动类上标注地址 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> &l

  • 10k+点赞的 SpringBoot 后台管理系统教程详解

    其实项目网上有很多了,但是教程比较详细的没多少,今天分享的项目从安装部署到代码具体功能都有很详细都说明 eladmin 是一款基于 Spring Boot 2.1.0 . Jpa. Spring Security.redis.Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由. 这个开源项目基本稳定,并且后续作者还会继续优化.完全开源!这个真的要为原作者点个赞,如果大家觉得这个项目有用的话,建议可

  • java进阶之了解SpringBoot的配置原理

    一.Spring Boot的特点 首先我们要知道 Spring Boot 在底层已经为我们添加好了很多依赖.比如我们常用的Tomcat,Spring,SpringMVC这些,甚至连mysql数据库的依赖也为我们添加好了 不过 SpringBoot 2.5.0 使用的mysql依赖版本是8.0.25的,如果还在使用 mysql 5 版本的小伙伴们就需要在项目的 pom.xml 文件中再次指定自己所用的依赖版本号.(因为 maven 在引入依赖时采取就近原则,你如果指定了依赖版本号的话,它会加载离它

随机推荐