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实现属性名称的设置别名的更多相关文章

  1. json字符串转java对象,json中字段名称与对象属性名称不一致

    json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决

  2. C#通过属性名称获取(读取)属性值的方法

    之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊! 然后今天我再上网找了找,被我找到了,跟大家分享一下. 其实原理并不复 ...

  3. 配置iis时,浏览项目提示 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    无法识别的属性“targetFramework”.请注意属性名称区分大小写. 行 12:     </appSettings>行 13:   <system.web>行 14: ...

  4. java-读取类中的属性名称和值

    方法 /** * 获取类中的所有属性明名称和值(因涉及到可能会是继承关系的父类,所以从f中去属性名称,从f2中取值,两个可以一样,也可以使父类) * @param f:读取属性类(如果取父类的,则这里 ...

  5. IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    当我把我做的网站放在IIS7.0的服务器上的时候,浏览时提示这个错误信息 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消 ...

  6. 分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    转自:http://blog.sina.com.cn/s/blog_48964b12010157p0.html 配置错误说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息 ...

  7. 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误分析以及解决方案

    我的配置文件中是这样写的,<compilation debug="true" targetFramework="4.0"> 发布在iis上出现了 “ ...

  8. 配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

    在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写.  错误如图: 错误原因: 部署网站时,使用的应用程序池版本不对 ...

  9. EasyUI DataGrid定制默认属性名称

    EasyUI DataGrid绑定服务器返回Json数据的解决方案 1. 服务器返回的数据对象格式,及初始化返回值 public class RequestResult { private int c ...

  10. IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键

    IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f

随机推荐

  1. 单词检索(search)

    单词检索(search) \(Description\) 小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务. 由于学校需要一些材料,校长需要在文章中检索一些信息.校长一共给了小可可N篇文章, ...

  2. LG P5043 树同构

    \(\text{problem}\) 无根树同构的判断 \(\text{Analysis}\) 考虑树哈希,注意使用较正确的哈希方法 无根树同构有个性质 只要判断以这两棵树的重心为根是否同构即可 \( ...

  3. LeetCode-622 设计循环队列

    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/design-circular-queue 题目描述 设计你的循环队列实现. 循环队列是一种线性数据结构, ...

  4. java-tocsv

    1.依赖 <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artif ...

  5. Xilinx XPM使用说明--XPM_MEMORY_SDPRAM

    XPM_MEMORY_SDPRAM 参数化宏:简单的双端口RAM 介绍 此宏用于实例化简单双端口RAM.端口A用于从存储器执行写入操作,端口B可用于从存储器读取. 下面介绍XPM_MEMORY实例的基 ...

  6. C++语言程序设计实验一 类与对象

    Complex.hpp文件源码: #include <iostream> using namespace std; class Complex { public: Complex(floa ...

  7. 数据类型之字符串(string)(三)

    其他操作 1.len():求序列长度,返回数字 a = 'my name is wang'len(a) 返回 15 空格也占一个位置. 2.+:连接2个字符串 >>> b = 'wh ...

  8. i18n多语言 解决页面一刷新就恢复默认语言问题

  9. VUE学习-元素过渡

    单元素过渡 appear 初始渲染 通过 appear attribute 设置节点在初始渲染的过渡 appear + css <transition appear appear-class=& ...

  10. pytest框架插件源码_关于钩子方法调用部分的简单理解(pytest_runtest_makereport)

    前言: 因为想不明白写的pytest_runtest_makereport里的yield是怎么把结果传出来的?pytest是怎么调用的我们自己写的pytest_runtest_makereport方法 ...