首页 > 编程语言 >Json与Java对象互转工具类

Json与Java对象互转工具类

时间:2023-07-12 11:46:32浏览次数:43  
标签:mapper return String json Json 互转 Java public

常用的 JSON 处理库:

Jackson:这是最常用的库,它提供了各种特性,如生成/解析 JSON 的速度快,内存占用小,可扩展性强等。Jackson 支持类型安全,还具有复杂数据绑定的能力。
Gson:由 Google 开发,也是一个相当流行的库,使用起来非常简单。Gson 可以工作在任何 JDK 版本上,没有任何额外的依赖项。
Fastjson:这是 Alibaba 开发的 JSON库,性能好,使用起来简单。


在JavaWeb开发中,通常会使用Jackson库,因为SpringBoot已经内置了该库,不必在pom.xml中额外引入依赖。 以下代码为笔者写的Json转换工具类,使用起来比较简单方便
点击查看代码
@Slf4j
@Component
@RequiredArgsConstructor
public class JsonUtils {

    private final ObjectMapper mapper;

    public <T> T toObject(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            // 记录日志或者返回空对象
            log.error(String.format("json转%s对象失败", clazz.getSimpleName()), e);
            return null;
        }
    }

    /**
     * 泛型类入参
     */
    public <T> T toObject(String json, TypeReference<T> type) {
        try {
            return mapper.readValue(json, type);
        } catch (IOException e) {
            // 记录日志或者返回空对象
            log.error(String.format("json转%s对象失败", type.getType()), e);
            return null;
        }
    }

    public String toJson(Object object) {
        try {
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            // 记录日志或者返回空字符串
            log.error(String.format("%s对象转json失败", object.getClass().getSimpleName()), e);
            return "";
        }
    }

}

有时,对于Json中的某些属性,可能并不是我们所需要的,因此构建对应类时会忽略这些属性。若不做额外处理,用ObjectMapper转换时则会抛出异常UnrecognizedPropertyException,有以下两种处理方式:
  1. 在对应类上添加注解@JsonIgnoreProperties(ignoreUnknown = true)

  2. 在全局配置类中,给ObjectMapper做额外配置

点击查看代码
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    }

第一种方式缺点:每个类遇到类似场景都需要添加注解
第二种方式缺点:有可能会出现必要属性缺失却未及时发现的情况
两种方式各有优劣,由各位自己决定吧

标签:mapper,return,String,json,Json,互转,Java,public
From: https://www.cnblogs.com/ashet/p/17547103.html

相关文章

  • Prettier 配置指南 .prettierrc.json 文件配置指南
    1.在项目根目录下面,新建.prettierrc.json文件2.prettuer配置{"printWidth":100,"tabWidth":2,"useTabs":true,"semi":true,"singleQuote":true,"trailingComma":"none","b......
  • 如何实现java环境安装的具体操作步骤
    Java环境安装Java是一种跨平台的编程语言,可以在不同的操作系统上运行。在开始学习和使用Java之前,我们需要先安装Java环境。本文将介绍如何在Windows、Mac和Linux操作系统上安装Java,并提供相关代码示例。Windows操作系统在Windows操作系统上安装Java需要进行以下步骤:下载Java......
  • mysql json使用
    如何加快对json数据的查询创建虚拟列addcolumn`column_name`varchat(32)generatedalwaysas(json_unquote(json_extract(`json_column`,'$.column')))virtualnull;为虚拟列添加索引createindexidx_columnontable_name(column_name)......
  • 使用Java8 Stream流中的Collectors.collectingAndThen()方法去重
    https://blog.csdn.net/qq_40474184/article/details/122043378Stream流的常用方法大全https://blog.csdn.net/weixin_52317961/article/details/128117727......
  • JavaScript 将对象数组按字母顺序排序
    原文链接:JavaScript将对象数组按字母顺序排序这里给出三种解决方案:1.if条件语句+sort()2.localeCompare()+sort()3.Collator()+sort()sort用法语法array.sort(compareFunction)参数值参数描述compareFunction可选。定义替代排序顺序的函数。该函数......
  • Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是
    1.jquerygrep()筛选遍历数组(可以得到反转的数组)//1.jquerygrep()筛选遍历数组(可以得到反转的数组)vararray=[1,5,9,3,12,4,48,98,4,75,2,10,11];varfilterArray=$.grep(array,(currentValue)=>{returncurrentValue>10;});console.log(`${filt......
  • java.lang.IllegalStateException: No primary or single unique constructor found f
      错误:Noprimaryorsingleuniqueconstructorfoundforinterfacejava.util.List(没有为List接口找到主要的或唯一的构造函数)原因:请求的参数没有匹配上处理函数的参数  解决:为List参数添加@RequestParam注解即可 ......
  • tsconfig.json语法检查问题
    前言:这个问题卡住好久。全是红色波浪线,代码没法看。第一步:"compilerOptions":{"moduleResolution":"node","jsx":"react"},解决办法:https://stackoverflow.com/questions/40899868/typescript-cannot-find-module-react消除了一部分,但一部分还是报错 ......
  • Java之多线程的同步和死锁
    设计模式中的单例模式的懒汉方式会存在多线程的安全问题;通过以下测试代码可以看到两个线程中得到的并不是同一个单例对象;@TestpublicvoidunsafeSingleInstanceTest()throwsInterruptedException{AtomicReference<UnSafeSingleInstance>s1=newAtomicRe......
  • Java 中的值传递和引用传递 ?
    一.介绍值传递:值传递(Pass-by-Value)当我们向方法传递参数时,实际上是将该参数的值进行拷贝,并将拷贝后的值传递给方法内部。在方法内部对参数进行修改不会影响原始变量的值。引用传递:引用传递(Passbyreference)是指方法调用时实参(即传入方法的参数)是一个对象的引用,而不是......