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();
}
}
} }

最新文章

  1. Table样式
  2. qt中添加Q_OBJECT报错的问题
  3. f2fs解析(三)NAT中如何区分inode和其他dnode
  4. 九度OJ 1453 Greedy Tino -- 动态规划
  5. 动态改变数据库连接 in Entity Framework 5
  6. Ajax简单应用-购物车
  7. Python 命令行非阻塞输入
  8. asp.net能不托管吗?
  9. uva 280 - Vertex
  10. JSP的include指令
  11. CSS中margin和position:relative的定位问题
  12. iOS视频编辑SDK
  13. js中的事件委托详解
  14. win8在安装office visio2003出现“请求的操作需要提升”,解决方法
  15. iOS模拟器:Undefined symbols for architecture x86_64
  16. dedecms自增标签[field:global.autoindex/]的运用
  17. RegExp正则表达式——更深层次解析
  18. iOS逆向+越狱
  19. 转 UIActivityIndicatorView、UIProgressView 活动与进度指示器-IOS开发
  20. python常用模块之configparser模块

热门文章

  1. @Transactional千万不要这样用!!踩坑了你都可能发现不了!!!
  2. shell 命令小记
  3. WeNet调试
  4. Rancher 使用介绍(可以通过界面管理 K8s 平台)
  5. android 实现检测版本,下载apk更新(附源码)
  6. 图文并茂解释开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?
  7. golang流程控制if,switch分支
  8. Lnmp切换PHP版本
  9. 蓝牙mesh消息包与以太网帧的分层构成
  10. Iperf参数详解