余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Jackson给字段指定别名

xiyangw 2023-10-04 18:28 32 浏览 0 评论

有的时候,用于序列化、反序列化的类型中字段的名称,和JSON字符串中的字段的名称可能不是规范的映射关系,这个时候我们就需要给类型中的字段指定一个JSON处理时的别名,比如:

public class TestVO {
    private String Xyz;

    public String getXyz() {
        return Xyz;
    }

    public void setXyz(String xyz) {
        Xyz = xyz;
    }
}

这个时候使用Jackson的默认配置进行序列化或反序列化,由于Jackson优先使用getter, setter方法来进行JSON处理,这里的getter, setter方法都是使用IDE自动生成的,那就会导致生成的报文中,Xyz字段被Jackson处理成了xyz。

    @Test
    void toJson() throws JsonProcessingException {
        TestVO vo = new TestVO();
        vo.setXyz("xyz");
        System.out.println(objectMapper.writeValueAsString(vo)); 
    }

也就是说,成员变量Xyz的getXyz方法在Jackson的默认命名映射中会被序列化为xyz,这个是很直观的,需要说明的是,如果成员变量真的名为Xyz,那么其通过IDE自动生成的getter方法确实是getXyz,这种就跟成员变量xyz的getter方法一样了,所以成员变量Xyz这种以大写字母开头,紧跟第二个字母是小写字母的命名是非常不规范的,应该严格避免,这是题外话。

但是如果维护已有的代码,恐怕有时候就和规范有所出入,如果我们希望生成的JSON报文和反序列化的JSON报文里面的字段名和类型中的字段名保持一致,换句话说我们不希望使用Jackson默认的字段名称映射规则,我们希望自己给成员变量指定别名,比较好的有两种方法:

public class TestVO {
    @JsonProperty
    private String Xyz;

    @JsonIgnore
    public String getXyz() {
        return Xyz;
    }
    @JsonIgnore
    public void setXyz(String xyz) {
        Xyz = xyz;
    }
}

另一种方法是:

public class TestVO {

    private String Xyz;

    @JsonProperty("Xyz")
    public String getXyz() {
        return Xyz;
    }

    @JsonProperty("Xyz")
    public void setXyz(String xyz) {
        Xyz = xyz;
    }
}

可见第一种方法是让getter,setter方法失效来实现,第二种方法则是利用Jackson使用getter, setter方法的原理,给成员变量指定别名,综合起来,第二种方法只涉及一个注解@JsonProperty,并且只需要在getter, setter方法上使用,因此更简单。

如果下面这么使用:

public class TestVO {
    @JsonProperty
    private String Xyz;

    @JsonProperty
    public String getXyz() {
        return Xyz;
    }
    @JsonProperty
    public void setXyz(String xyz) {
        Xyz = xyz;
    }
}

会导致生成的JSON中多出个字段:{"xyz":"xyz", "Xyz":"xyz"},这种肯定不是最优秀的解决方案。

相关推荐

前端开发之用以处理表单的jQuery控件之AJAX请求

介绍介绍我们的TFUMS的网页模板基本上都做好了,但是大家都发现了我们的模板里面的表单是不能提交的,这是因为缺少驱动程序,这个驱动程序就是指Javascript代码。在用户填写完表单项之后,点击了提交...

AJAX with JSP使用jQuery示例_ajax和jquery先学哪个

在这里,您将获得使用jQuery的JSP的AJAX示例。AJAX用于从服务器发送和接收数据,而无需重新加载页面。我们可以使用jQuery轻松实现AJAX。它为AJAX功能提供了各种方法。我使用Ecli...

华杉科技-jQuery与AJAX基础入门到实战精通

华杉科技提供的“jQuery与AJAX基础入门到实战精通”课程是一个涵盖了jQuery和AJAX技术的全面学习路径。下面是该课程的一个大致的学习大纲,以帮助你了解你将学到什么。1.jQuery基础入...

jQuery实现Ajax功能分析「与Flask后台交互」

本文实例讲述了jQuery实现Ajax功能。分享给大家供大家参考,具体如下:jQuery是一个小型的JavaScript库,它通常被用来简化DOM和JavaScript操作。通过在服务器...

jQuery - AJAX load() 方法_jqueryajax全部用法

jQueryload()方法jQueryload()方法是简单但强大的AJAX方法。load()方法从服务器加载数据,并把返回的数据放入被选元素中。语法:$(selector).load...

原生异步请求方法ajax,及jQuery相关方法,如何采用ES6封装ajax

知识已经过时了,可以直接跳到文章末尾看ES6封装ajax。怀念曾经的jQuery一.ajax方法jQuery:JavaScript代码包装成拿过来就能实现特定功能的代码库,基本淘汰了;json:简单...

JS类库Jquery(二):优雅的使用JQuery写Ajax实现前后端完美交互

Jquery虽然属于比较老的技术,但是相较于原生的JS写起来还是反方便很多,现在流行使用VUE等开源的框架,但是这并非不妨碍咱们进行Jquery的学习,前端程序员成长的过程中Jquery是必须了解的类...

Python Web详解:(Ajax+JSON+JQuery)

JOSN:JavascriptObjectNotation作用:主要约束前后端交互数据的格式JSON的格式表示单个对象使用{}采用键值对的格式保存数据键必须使用双引号引起来相当于...

JavaScript、Ajax、jQuery全部知识点,1分钟速懂!

本文将详细解读JavaScript、ajax、jQuery是什么?他们可以实现什么?1、JavaScript定义:javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一...

一文读懂Ajax与Axios、jquery之间的关系与区别

1、关系1)Ajax与jQuery:jQuery提供了对Ajax技术的封装,使得使用Ajax变得更加方便。jQuery中的Ajax方法是对原生的Ajax技术(基于XMLHttpRequest对象)进行...

Javascript应用-jQuery Ajax DOM 元素、遍历、数据操作和方法

jQuery库拥有完整的Ajax兼容套件。其中的函数和方法允许在不刷新浏览器的情况下从服务器加载数据,具体如下:函数描述jQuery.ajax()执行异步HTTP(Ajax)请求。.aja...

Jquery中ajax的使用_jquery.ajax

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。Jquery包装的ajax操作如下:$get$post操作...

全新web前端开发教程之Jquery Ajax

1、$.ajaxjquery调用ajax方法:格式:$.ajax({});参数:type:请求方式GET/POSTurl:请求地址urlasync:是否异步,默认是true表示异步data:发送到服务...

jquery对ajax的支持_ajax是什么

...

jquery中的Ajax请求详解各个参数_jquery ajax实例

比较适合初学的人$.ajax({url:"接收数据的页面地址",data:{参数:值,参数:值........},type:'post',或者getdataType:'json',async:t...

取消回复欢迎 发表评论: