如何在Jackson中使用PropertyNamingStrategy

Jackson api被广泛用于将json转换为Object并将Object转换为JSON。因此,如果您有json字符串并想在java对象中进行转换,请创建与json中的字段相同的bean的字段名。 Jackson在将json字段映射到java对象字段时遵循标准的bean约定,但是如果您有一个不遵循命名约定的json(对于以大写字母开头的ex字段),jackson不知道如何将该字段与您的java对象映射。 您可以使用@JsonProperty批注,但有时很难在每个类的每个字段上都使用此批注。这就是PropertyNamingStrategy的 用意 。 您可以根据需要修改此类。

让我们举个例子。 我们有一个像这样的json:

{'CustName':'Abhishek Somani','Result':null,'CustNo':'1234'}

请注意,每个字段的首字母均为大写字母,这不是标准的bean命名约定。 我们正在尝试将此json映射到以下bean:

public class JsonBean {/*** */private String custNo ;private String custName ; private String result;public String getResult() {return result;}public void setResult(String result) {this.result = result;}public String getCustNo() {return custNo;}public void setCustNo(String custNo) {this.custNo = custNo;}public String getCustName() {return custName;}public void setCustEm(String custName) {this.custName = custName;}
}

要将这个json映射到jsonBean,我们必须创建自己的自定义命名策略,如下所示。 在这里,我们将字段名称的首字母转换为大写。

import org.codehaus.jackson.map.MapperConfig;
import org.codehaus.jackson.map.PropertyNamingStrategy;
import org.codehaus.jackson.map.introspect.AnnotatedField;
import org.codehaus.jackson.map.introspect.AnnotatedMethod;public class MyNameStrategy extends PropertyNamingStrategy{@Overridepublic String nameForField(MapperConfigconfig,AnnotatedField field, String defaultName) {return convert(defaultName);}@Overridepublic String nameForGetterMethod(MapperConfigconfig,AnnotatedMethod method, String defaultName) {return convert(defaultName);}@Overridepublic String nameForSetterMethod(MapperConfigconfig,AnnotatedMethod method, String defaultName) {String a = convert(defaultName); return a;}public String convert(String defaultName ){char[] arr = defaultName.toCharArray();if(arr.length !=0){if ( Character.isLowerCase(arr[0])){char upper = Character.toUpperCase(arr[0]);arr[0] = upper;}}return new StringBuilder().append(arr).toString();}}

这是要测试的主要课程。 我们正在Jackson的ObjectMapper中设置customNamingStrategy。

import java.io.File;
import java.io.IOException;import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;public class JsonTest {public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();mapper.setPropertyNamingStrategy(new MyNameStrategy());File f = new File('F:/abc.json');JsonBean bean = (JsonBean)mapper.readValue(f, JsonBean.class);mapper.writeValue(new File('F:/abc1.json'),bean);System.out.println(bean.getCustEm());}}

如果您无法提供命名策略,则将获得Exception,如下所示:

Exception in thread 'main' org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field 'CustNo' (Class JsonBean), not marked as ignorable

参考: Java,J2EE和Server博客上JCG合作伙伴 Abhishek Somani的Jackson中的PropertyNamingStrategy用法 。

翻译自: https://www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-jackson.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程--阅读笔记

团队对个人的期望 (1)交流:能有效的和其他队员交流,从大的技术方向,到看似微小的问题。 (2)说到做到:“按时交付” (3)接受团队赋予的角色并按角色要求工作:团…

Linux上的HotSpot GC线程CPU占用空间

以下问题将测试您对Linux操作系统上运行的Java应用程序的垃圾回收和高CPU故障排除的知识。 当调查过多的GC和/或CPU利用率时,此故障排除技术尤其重要。 它将假定您没有访问高级监视工具的能力,例如Compuware dynaTrace甚至JVisualVM。 将来会介绍使用此类…

tornado-简介和原理

tornado-设计初衷 1. 追求小而精 2. epoll IO多路复用和协程 3. 支持WebSocket 4. 单线程程序(GIL限制,本身某种意义上不启动多进程就是单线程程序) # Python GIL介绍详情 tronado应用场景 1. 大量的http请求连接(大量的用户请求,要求并发性和高性能) tr…

mysql5.6.13_MySQL-5.6.13解压版(zip版)安装配置教程

1、将mysql-5.6.13-winx64.zip 解压到D:\mysql-5.6.13\目录。2、清理里面的调试文件打开这个目录,发现里面的文件夹和文件跟一个安装好后的MySQL基本没有区别。可能你会很郁闷,这个MySQL5.6.13居然有1.04GB,呵呵,仔细一看你就会发…

前端学习笔记--HTTP缓存

原文地址:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hlzh-cn 缓存并重用之前获取的资源的能力是性能优化的一个关键方面。 每个浏览器都自带了 HTTP 缓存实现功能,只需要确保每个服务…

socket programming

进行 socket programming开始要做的工作&#xff1a; On Linux: 以下是client代码&#xff0c;使用TCP&#xff0c;注意网络字节序&#xff1a; 1 #include <sys/socket.h> 2 #include <netinet/in.h> 3 #include <arpa/inet.h> 4 int main() 5 { 6 …

如何用Veripacks替换构建模块

比较下面的两棵树。 在这两种情况下&#xff0c;目标都是拥有一个具有两个独立模块&#xff08; frontend和reporting &#xff09;和一个共享/公用模块&#xff08; domain &#xff09;的应用程序。 frontend的代码不应访问reporting代码&#xff0c;反之亦然。 两个模块都可…

JS的DOM和BOM

* JavaScript分三个部分: ECMAScript标准:JS的基本的语法DOM:Document Object Model --->文档对象模型----操作页面的元素BOM:Browser Object Model----->浏览器对象模型---操作的是浏览器一、DOM对象 文档:把一个html文件看成是一个文档,由于万物皆对象,所以把这个文档看…

mysql建表的规则_MYSQL建表规则 - Love彼岸花开的个人空间 - OSCHINA - 中文开源技术交流社区...

建立表规约【强制】表名、字段名必须使用小写字母或数字&#xff0c;禁止出现数字开头&#xff0c;禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大&#xff0c;因为无法进行预发布&#xff0c;所以字段名称需要慎重考虑。说明&#xff1a;MySQL 在 Windows 下不区…

数据库(11)-- Hash索引和BTree索引 的区别

索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持&#xff1a;Innodb和MyISAM默认的索引是Btree索引&#xff1b;而Mermory默认的索引是Hash索引。 Hash索引 哈希索引包含以数组形式组织的 Bucket 集合。 哈希函数将索…

JBoss AS 8中的Java EE 7和EJB 3.2支持

你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 。 除此以外&#xff0c;此版本的Java EE还引入了EJB规范的EJB 3.2版本。 与EJB 3.1规范相比&#xff0c;EJB 3.2具有一些新功能。 我在这里引用EJB 3.2规范中的文本&#xff0c;总结了新功能&#xff…

MySQL的复制:MySQL系列之十三

一、MySQL复制相关概念 主从复制&#xff1a;主节点将数据同步到多个从节点级联复制&#xff1a;主节点将数据同步到一个从节点&#xff0c;其他的从节点在向从节点复制数据同步复制&#xff1a;将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制异步复制&…

mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像

我在显示从JFrame的数据库检索的图像时遇到问题.这是我将要使用的??????……try{Class.forName("com.mysql.jdbc.Driver");Connection conDriverManager.getConnection("jdbc:mysql://localhost:3306/studio","root","");Statem…

bootstrap到底是用来做什么的(概念)

Bootstrap官网&#xff1a;http://v3.bootcss.com/ Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。 是一个做网页的框架&#xff08;目前最流行的WEB前端框架&#xff09;&#xff0c;就…

hdu 1020 Encoding

题目 这个题有一个挺坑的误区&#xff0c;不是统计字符串中出现的所有字符的个数&#xff0c;而是统计相邻的个数 刚开始就写错了 正解&#xff1a; #include <stdio.h> #include <string.h> int main(){int n,i,num;char str[10001];scanf("%d",&n)…

将NetBeans代码模板弯曲到我的意愿

任何阅读过我关于NetBeans的文章的人都知道&#xff0c;我真的很喜欢NetBeans的众多功能。 但是&#xff0c;最近&#xff0c;我发现自己对NetBeans特定功能的特定问题越来越恼火。 最终&#xff0c;它使我烦恼不已&#xff0c;促使我开始研究如何根据自己的喜好禁用或更改该功…

MySQL安装过程

最近试着重装了下MySQL&#xff0c;安装过程很简单&#xff0c;希望能帮助大家 mysql安装过程 1. 下载&#xff1a; 我下载的是64位系统的zip包&#xff1a; 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载zip的包。 下载后解压到对应目录 如&#xff1a;D:…

极简的MyBatis在Spring Boot下的配置

以我的一个项目为例。 0、项目结构&#xff1a; 1、POM中添加MyBatis的依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version> …

mysql sum很慢,可以在MySQL中加快sum()吗?

Im doing a "select sum(foo) from bar" query on a MySQL database thats summing up 7.3mm records and taking about 22 seconds per run. Is there a trick to speeding up sums in MySQL?解决方案No, you cant speed up the function itself. The problem here…

css常用属性总结:颜色和单位

在css代码编写中&#xff0c;估计颜色和单位是必不可少的&#xff0c;然而在css中关于颜色和单位值的写法有很多种写法&#xff0c;所以有必要把它弄清楚。 颜色 当初我在初学前端的时候&#xff0c;就会冒出一个疑问“我该如何设置网页颜色&#xff1f;”&#xff0c;一般常…