千家信息网

springboot中如何配置jackson

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍springboot中如何配置jackson,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot jackson配置项目中使用的json是jack
千家信息网最后更新 2025年01月19日springboot中如何配置jackson

这篇文章主要介绍springboot中如何配置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 */@Configurationpublic 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() {            @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 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 chapterList;

以上是"springboot中如何配置jackson"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0