gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名
gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名
package com.example.core.mydemo.TypeAdapter; import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName; import java.lang.reflect.Field; /**
* 打印输出结果:
jsonStr={"Result":null,"id":1,"data":null}
bean=result:null id:1 data:null
bean2=result:-1 id:1 data:null
jsonStr2={"Result":-1,"id":1,"DATA":"Empty"}
*/
public class UserBean {
@SerializedName("Result")
public Integer result;
public Long id;
public String data; @Override
public String toString() {
return "result:"+result+" id:"+id+" data:"+data;
} public static void main(String[] args) {
// Gson gson = new Gson();
//serializeNulls输出null
Gson gson = new GsonBuilder().serializeNulls().create();
UserBean userBean = new UserBean();
userBean.setId(1);
// userBean.setData(null);
// userBean.setResult(null); String jsonStr = gson.toJson(userBean);
System.out.println("jsonStr=" + jsonStr);
UserBean bean = gson.fromJson(jsonStr,UserBean.class);
System.out.println("bean=" + bean.toString()); Gson gson2 = new GsonBuilder()
.registerTypeAdapter(String.class,new StringAdapter())
.registerTypeAdapter(Integer.class,new IntegerAdapter())
.registerTypeAdapter(int.class,new IntegerAdapter())
.setFieldNamingStrategy(new FirstLowerCaseStrategy())
.create(); UserBean bean2 = gson2.fromJson(jsonStr,UserBean.class);
System.out.println("bean2=" + bean2.toString()); System.out.println("jsonStr2=" + gson2.toJson(bean2)); } public int getResult() {
return result;
} public void setResult(Integer result) {
this.result = result;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getData() {
return data;
} public void setData(String data) {
this.data = data;
} public static class FirstLowerCaseStrategy implements FieldNamingStrategy { @Override
public String translateName(Field f) {
// System.out.println("name=" + f.getName());
if("data".equalsIgnoreCase(f.getName())){
// return f.getName().toLowerCase();
// System.out.println("upper=" + f.getName().toUpperCase());
return f.getName().toUpperCase();
}else{
return f.getName();
}
}
} }
gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名的更多相关文章
- json字符串转java对象,json中字段名称与对象属性名称不一致
json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决
- C#通过属性名称获取(读取)属性值的方法
之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊! 然后今天我再上网找了找,被我找到了,跟大家分享一下. 其实原理并不复 ...
- 配置iis时,浏览项目提示 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
无法识别的属性“targetFramework”.请注意属性名称区分大小写. 行 12: </appSettings>行 13: <system.web>行 14: ...
- java-读取类中的属性名称和值
方法 /** * 获取类中的所有属性明名称和值(因涉及到可能会是继承关系的父类,所以从f中去属性名称,从f2中取值,两个可以一样,也可以使父类) * @param f:读取属性类(如果取父类的,则这里 ...
- IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。
当我把我做的网站放在IIS7.0的服务器上的时候,浏览时提示这个错误信息 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消 ...
- 分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
转自:http://blog.sina.com.cn/s/blog_48964b12010157p0.html 配置错误说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息 ...
- 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误分析以及解决方案
我的配置文件中是这样写的,<compilation debug="true" targetFramework="4.0"> 发布在iis上出现了 “ ...
- 配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写. 错误如图: 错误原因: 部署网站时,使用的应用程序池版本不对 ...
- EasyUI DataGrid定制默认属性名称
EasyUI DataGrid绑定服务器返回Json数据的解决方案 1. 服务器返回的数据对象格式,及初始化返回值 public class RequestResult { private int c ...
- IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键
IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f
随机推荐
- JZOJ 4754.矩阵
\(\text{Problem}\) \(\text{Solution}\) 纪念我考场正解被二分暴力暴踩... 首先二分的话,显然可以二分出答案,然后数矩阵和大于等于本矩阵的是否有 \(k\) 个 ...
- .Net Core 配置源码学习 (一)
一 背景 相比.Net Framework , .NET Core的配置系统 ,有一些明显的优点 ,如: 1 支持更丰富的配置源 2 读取配置时, 可以用相同的方式读取, 并且非常方便 3 修改配置后 ...
- CCRD_TOC_2008年第5期
中信国健临床通讯 2008年第5期 目 录 RA: 临床缓解与亚临床炎症 1. DMARD诱导缓解的RA患者中仍有影像学确证的亚临床炎症 Brown AK, et al. Arthriti ...
- ChatGPT强势爆红,背后的技术原理是?一文轻松搞懂!
目录 什么是ChatGPT? OpenAI 背后的原理和发展历程 带来的争议和挑战 尾语 作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.源码解析.科技故事.项目 ...
- LeetCode-825 适龄的朋友
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/friends-of-appropriate-ages 题目描述 在社交媒体网站上有 n 个用户. ...
- zint
一.Zint1. 介绍 Zint是一个软件,允许在任何广泛的公共领域条形码标准中轻松编码数据,并允许将这种功能集成到您自己的程序中. Zint项目的目标是提供一个完全跨平台的开源条形码生成解决方案,目 ...
- Vue2安装less版本过高问题,需要降级
安装指定less版本解决: -D: 本地安装 -g: 全局安装 npm install less@3.9.0 less-loader@5.0.0 -D
- Prometheus学习笔记之设置存储时间为30天不生效
0x00 概述 Prometheus升级到2.23进行测试发现,设置存储时间为30天未生效,根据官方说明手册,实际运行后发现数据只能存储几个小时.... --storage.tsdb.retentio ...
- NSIS Inetc插件 扩展使用
Inetc客户端插件,用于文件的上传和下载. 官网文档:https://nsis.sourceforge.io/Inetc_plug-in 以下载net包为例 inetc::get "htt ...
- react+Native使用typeScript
1.为什么使用typeScript? typeScript是JavaScript的超集 typeScript在编译期间就可以将错误抛出 增强代码的可阅读性和可维护性 2.案例的功能逻辑 切换职业 选择 ...