利用jackson封装常用jsonutil工具类(代码片段)

christopherchan christopherchan     2022-12-22     564

关键词:

在日常的项目开发中,接口与接口之间、前后端之间的数据传输一般都是使用JSON格式,那必然会封装一些常用的Json数据转化的工具类,本文讲解下如何利用Jackson封装高复用性的Json转换工具类。

转换格式属性配置

首先,我们需要对Json对象转换自定义些常用配置属性,封装成适合项目接口规则的工具类。代码如下:

@Slf4j
public class JsonUtil 
    private static ObjectMapper objectMapper = new ObjectMapper();
    // 日起格式化
    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
    static 
        //对象的所有字段全部列入
       objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
        //取消默认转换timestamps形式
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //忽略空Bean转json的错误
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
        //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
        objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
        //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
    

对象与Json字符串之间的转换

一般对象与字符串之间的转换最为常用,代码实现如下:

    /**
     * 对象转Json格式字符串
     * @param obj 对象
     * @return Json格式字符串
     */
    public static <T> String obj2String(T obj) 
        if (obj == null) 
            return null;
        
        try 
            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
         catch (JsonProcessingException e) 
            log.warn("Parse Object to String error : ", e.getMessage());
            return null;
        
    

    /**
     * 对象转Json格式字符串(格式化的Json字符串)
     * @param obj 对象
     * @return 美化的Json格式字符串
     */
    public static <T> String obj2StringPretty(T obj) 
        if (obj == null) 
            return null;
        
        try 
            return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
         catch (JsonProcessingException e) 
            log.warn("Parse Object to String error : ", e.getMessage());
            return null;
        
    

    /**
     * 字符串转换为自定义对象
     * @param str 要转换的字符串
     * @param clazz 自定义对象的class对象
     * @return 自定义对象
     */
    public static <T> T string2Obj(String str, Class<T> clazz)
        if(StringUtils.isEmpty(str) || clazz == null)
            return null;
        
        try 
            return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
         catch (Exception e) 
            log.warn("Parse String to Object error : ", e.getMessage());
            return null;
        
    

上述三个方法实现起来也比较简单,满足了绝大多数业务接口开发,不过聪明的你们也想到了,在字符串转换对象的时候会存在一个坑,不用我说,你们也知道,就是在字符串与集合对象转换时会存在问题,那应该如何解决呢?

集合对象与Json字符串之间的转换

    public static <T> T string2Obj(String str, TypeReference<T> typeReference) 
        if (StringUtils.isEmpty(str) || typeReference == null) 
            return null;
        
        try 
            return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
         catch (IOException e) 
            log.warn("Parse String to Object error", e);
            return null;
        
    

    public static <T> T string2Obj(String str, Class<?> collectionClazz, Class<?>... elementClazzes) 
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzes);
        try 
            return objectMapper.readValue(str, javaType);
         catch (IOException e) 
            log.warn("Parse String to Object error : " + e.getMessage());
            return null;
        
    

测试用例

实体类

public class User 
    private Integer id;
    private String email;

    // 省略 set 和 get 方法

测试代码

@Slf4j
public class JsonUtilTest 
    public static void main(String[] args) 
        User user1 = new User();
        user1.setId(1);
        user1.setEmail("[email protected]");
        String userJsonstr = JsonUtil.obj2String(user1);
        String userJsonPretty = JsonUtil.obj2StringPretty(user1);
        log.info("userJson: ", userJsonPretty);

        User user2 = JsonUtil.string2Obj(userJsonstr, User.class);
        user2.setId(2);
        user2.setEmail("[email protected]");

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        String userListJson = JsonUtil.obj2String(userList);
        List<User> userListBean = JsonUtil.string2Obj(userListJson, new TypeReference<List<User>>() );
        if (userListBean != null) 
            userListBean.forEach(user -> 
                System.out.println(user.getId() + " : " + user.getEmail());
            );
        
        List<User> userListBean2 = JsonUtil.string2Obj(userListJson, List.class, User.class);
        if (userListBean2 != null) 
            userListBean2.forEach(user -> 
                System.out.println(user.getId() + " : " + user.getEmail());
            );
        
    

测试用例结果:

技术图片

jackson工具类使用及配置指南高性能配置(转)

Jackson使用工具类通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是JSON字符串--->Java对象以及Java对象--->JSON字符串。publicclassJsonUtils{/***Loggerforthisclass*/privatestaticfinalLoggerlogger=LoggerFactory.getLogger(JsonUtils.clas 查看详情

java好的的工具类:jsonutils(代码片段)

...ind.JavaType;importcom.fasterxml.jackson.databind.ObjectMapper;/****@Title:JsonUtils.java*@Packagecom.lee.utils*@Description:自定义响应结构,转换类*Copyright:Copyright(c)2016*Company:Nathan.Lee.Salvatore**@authorleechenxiang*@date2016年4月29日下午11:05:03*@versionV1.0*/publicclassJsonU... 查看详情

android封装json工具类+jsonutil(代码片段)

JsonUtil类,这类中没更新,下次publicclassJsonUtil// privatestaticDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",Locale.CHINESE); privatestaticDateFormatdateFormat=ne 查看详情

jsonutils序列化与反序列化工具(代码片段)

直接见代码,需要引入的包如下文,需要谷歌的包。1packagecom.cxf.value;23importcom.fasterxml.jackson.core.type.TypeReference;4importcom.fasterxml.jackson.databind.DeserializationFeature;5importcom.fasterxml.jackson.databind.Ob 查看详情

整理收集的一些常用java工具类(代码片段)

...具1.packagecom.taotao.utils;3.importjava.util.List;5.importcom.fasterxml.jackson.core.JsonProcessingException;6.importcom.fasterxml.jackson.databind.JavaType;7.importcom.fasterxml.jackson.databind.JsonNode;8.importcom.fasterxml.jackson.databind.ObjectMapper;10./**11.*json转换工具类12.*/13.publ... 查看详情

java常用工具类——json处理工具类(代码片段)

packagecom.springboot.commons.utils;importcom.springboot.commons.scan.JacksonObjectMapper;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;imp 查看详情

java常用工具类封装(代码片段)

java常用工具类封装importorg.apache.commons.lang.StringUtils;importjava.math.BigDecimal;publicclassCommonUtilpublicstaticStringsafeToString(Objectvalue,StringdefaultValue)if(value!=null)returnStringUti 查看详情

jackson处理对象和json之间转换的工具类(代码片段)

自己封装的jackson处理对象和json之间互相转化的工具类publicclassJsonUtil/***把对象转成json字符串*@paramobj*@return*/publicstaticStringconvertJsonString(Objectobj)ObjectMapperobjectMapper=newObjectMapper();Stringstr&# 查看详情

javascript总结(常用工具类的封装)

1.type类型判断isString(o){//是否字符串returnObject.prototype.toString.call(o).slice(8,-1)===‘String‘}isNumber(o){//是否数字returnObject.prototype.toString.call(o).slice(8,-1)===‘Number‘}isObj(o){//是否对象returnObject 查看详情

jsonutils工具类(代码片段)

在调用接口的时候,经常会用到对象与json之间的互相转换,这个工具类提供了相应的方法,如下:packagecom.glaway.ws.util;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importcom.alibaba.fastjson.JSON;impor 查看详情

利用jackson序列化实现数据脱敏

参考技术A先看下jackson的@JsonSerialize注解。@JsonSerialize是jackson提供自定义序列化方法的注解,它有个using属性,指定自定义序列化的执行类;例如:先自定义一个序列化类@JsonSerialize注解的Java类示例我们知道,springMVC是通过jackson... 查看详情

android工具类整合

Android-JSONUtil工具类常用的Json工具类,包含Json转换成实体、实体转json字符串、list集合转换成json、数组转换成jsonpublicclassJSONUtilprivatestaticfinalStringTAG=JSONUtil.class.getSimpleName();privateJSONUtil()privatestaticGsongson=newGson();/***传入... 查看详情

微信小程序之封装常用的api接口请求以及工具类方法(代码片段)

工具类封装://utils.js//显示消息提示框exportfunctionToast(title,type,time,isshow)wx.showToast(title:title,icon:type,duration:time,mask:isshow)//显示loading提示框。需主动调用wx.hideLoading才能关闭提示框exportfunctionLoading(t 查看详情

微信小程序之封装常用的api接口请求以及工具类方法(代码片段)

工具类封装://utils.js//显示消息提示框exportfunctionToast(title,type,time,isshow)wx.showToast(title:title,icon:type,duration:time,mask:isshow)//显示loading提示框。需主动调用wx.hideLoading才能关闭提示框exportfunctionLoading(t 查看详情

基于jackson的json与对象的互相转换

添加依赖jackson依赖其它常用的工具包依赖封装的JsonMapper类备注的待测试实体类User.javaStudent.java测试代码对象转换成JsonJson转换成对象Json与List对象互转Json与Map对象互转Json与对象在转换中遇到空属性  在JavaWeb开发中,经常... 查看详情

利用jackson工具将json文件和对象互转

  1.  需要下载JackSon工具,并导入到:    2.  编写html页面:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>用户注册</title><scripttype="text/javascript"src="./js/lib/ 查看详情

常用的io工具类

目录​​依赖​​​​IOUtils封装IO通用操作​​​​常用常量​​​​读写​​​​复制​​​​迭代、比较​​​​FileUtils文件操作工具​​​​常用常量​​​​系统路径​​​​文件体积​​​​创建、删除​​​​文件... 查看详情

flutter实战之getx工具类封装-getutils(代码片段)

在开发过程中经常会定义各种Utils类,用来作为常用的辅助工具来使用,GetUtils是getx为我们提供一些常用的工具类库,它提供了一些常用的方法,避免了我们二次开发,比如通过GetUtils我们可以用来判断参数是否是图片,是否是wo... 查看详情