响应对象转json时属性名大小写问题完美解决
首先:案例是model里的属性名大写,http response时json默认变成小写开头,和model属性不一致。
例子:
model为:
class User{private String NAME;private int AGE;getter 和 setter...
}http 请求后响应的json为:
{"name":"张三","age":20
}业务需求json为:
{"NAME":"张三","AGE":20
}
可行的解决方案:
网上搜了好多,大部分都是在属性上添加@JsonProperty("XXX"),但是这里就又出现了个问题,转json后会有两个同名但大小写不一样的属性;? 就又去搜索,说是在getter方法上添加@JsonProperty("XXX"),解决了,但是字段少没问题,咱每个实体model上添加下,如果字段多了呢?实体多了呢?
完美的解决方案:
本人自己推敲的,分享给大家,好用就用,不好用请忽略,当然肯定有其他更好的,有知道的请文末留言告知博主,非常感谢?
下面上方法代码:
响应json前将对象传入此方法即可
/*** 对象转json时属性变大写** @param entity* @return*/public static Map<String,Object> object2UpperCase(Object entity){Map<String,Object> res = Maps.newHashMap();if (null==entity){return res;}//将对象的属性转化为大写String json = JacksonUtil.bean2Json(entity);Map<String,Object> map = JacksonUtil.json2Map(json,String.class,Object.class);if (null!=map && !map.isEmpty()){for(Map.Entry<String,Object> entry:map.entrySet()){/*** TODO-关键在这里根据业务需要转大小写*/res.put(entry.getKey().toUpperCase(),entry.getValue());}}return res;}
JacksonUtil.java json转化工具类
package com.ww.common.json;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;/*** json转化工具* @author Ace Lee* */
public class JacksonUtil {private static final ObjectMapper MAPPER = new ObjectMapper();static {//MAPPER.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, false);MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);MAPPER.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);}private static final JsonFactory JSONFACTORY = new JsonFactory();/*** 把json参数转换成对应Vo* <B>第二个参数请使用 Class ,比如JacksonUtil.json2Bean("{\"name\":\"0000\",\"age\":456}", Car.class);</B>* @param json* @param valueTypeRef* @return*/public static <T> T json2Bean(String json, TypeReference<T> valueTypeRef) {T rtn =null;try {rtn = MAPPER.readValue(json, valueTypeRef);} catch (JsonParseException e) {throw new RuntimeException(e);} catch (JsonMappingException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}return rtn;}public static <T> T json2Bean(String json, Class<T> cls) {T rtn =null;try {rtn = MAPPER.readValue(json, cls);} catch (JsonParseException e) {throw new RuntimeException(e);} catch (JsonMappingException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}return rtn;}/*** 转换vo 为 json*/public static String bean2Json(Object o) {StringWriter sw = new StringWriter();JsonGenerator jsonGenerator = null;try {jsonGenerator = JSONFACTORY.createJsonGenerator(sw);MAPPER.writeValue(jsonGenerator, o);return sw.toString();} catch (Exception e) {throw new RuntimeException(e);//return null;} finally {if (jsonGenerator != null) {try {jsonGenerator.close();} catch (Exception e) {throw new RuntimeException(e);}}}}/*** 转换vo 为 json*/public static String bean2Json(Object o,ObjectMapper mapper) {StringWriter sw = new StringWriter();JsonGenerator jsonGenerator = null;try {jsonGenerator = JSONFACTORY.createJsonGenerator(sw);mapper.writeValue(jsonGenerator, o);return sw.toString();} catch (Exception e) {throw new RuntimeException(e);//return null;} finally {if (jsonGenerator != null) {try {jsonGenerator.close();} catch (Exception e) {throw new RuntimeException(e);}}}}/*** 转换vo 为 json,属性为null不被序列化*/public static String bean2JsonWithoutNull(Object o) {StringWriter sw = new StringWriter();JsonGenerator jsonGenerator = null;ObjectMapper mapper=new ObjectMapper();mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);try {jsonGenerator = JSONFACTORY.createJsonGenerator(sw);mapper.writeValue(jsonGenerator, o);return sw.toString();} catch (Exception e) {throw new RuntimeException(e);//return null;} finally {if (jsonGenerator != null) {try {jsonGenerator.close();} catch (Exception e) {throw new RuntimeException(e);}}}}/*** 转换Json String 为 HashMap*/@SuppressWarnings("unchecked")public static Map<String, Object> json2Map(String json,boolean collToString) {try {Map<String, Object> map = MAPPER.readValue(json, HashMap.class);if (collToString) {for (Map.Entry<String, Object> entry : map.entrySet()) {if (entry.getValue() instanceof Collection|| entry.getValue() instanceof Map) {entry.setValue(bean2Json(entry.getValue()));}}}return map;} catch (Exception e) {//return null;throw new RuntimeException(e);}}/*** json String转换为Map* @author dingyiming@chinasofti.com* @date 2016年1月5日 下午9:12:06* @param json* @param clk - key的类型* @param clv - value的类型* @return * @description*/public static <K,V> Map<K, V> json2Map(String json,Class<K> clk,Class<V> clv) {try {JavaType javaType = MAPPER.getTypeFactory().constructMapType(Map.class, clk, clv);Map<K, V> map = MAPPER.readValue(json, javaType);return map;} catch (Exception e) {//return null;throw new RuntimeException(e);}} /*** json String转换为ConcurrentMap* @author dingyiming@chinasofti.com* @date 2016年1月5日 下午9:12:06* @param json* @param clk - key的类型* @param clv - value的类型* @return * @description*/public static <K,V> ConcurrentMap<K, V> json2ConMap(String json,Class<K> clk,Class<V> clv) {try {JavaType javaType = MAPPER.getTypeFactory().constructMapType(ConcurrentHashMap.class, clk, clv);ConcurrentMap<K, V> map = MAPPER.readValue(json, javaType);return map;} catch (Exception e) {//return null;throw new RuntimeException(e);}}@SuppressWarnings("serial")public static class jsonParseException extends Exception {public jsonParseException(String message) {super(message);} }/*** List 转换成json* * @param list* @return*/public static String list2Json(List<Map<String, String>> list) {JsonGenerator jsonGenerator = null;StringWriter sw = new StringWriter();try {jsonGenerator = JSONFACTORY.createJsonGenerator(sw);new ObjectMapper().writeValue(jsonGenerator, list);jsonGenerator.flush();return sw.toString();} catch (Exception e) {//return null;throw new RuntimeException(e);} finally {if (jsonGenerator != null) {try {jsonGenerator.flush();jsonGenerator.close();} catch (Exception e) {//e.printStackTrace();throw new RuntimeException(e);}}}}/*** json 转List* * @param json* @return*/@SuppressWarnings("unchecked")public static List<Map<String, String>> json2List(String json) {try {if (json != null && !"".equals(json.trim())) {JsonParser jsonParse = JSONFACTORY.createJsonParser(new StringReader(json));ArrayList<Map<String, String>> arrayList = (ArrayList<Map<String, String>>) new ObjectMapper().readValue(jsonParse, ArrayList.class);return arrayList;} else {return null;}} catch (Exception e) {//return null;throw new RuntimeException(e);}}// 测试方法public static void main(String[] args) {
// User user = new User();
// user.setId(1);
// user.setUsername("张小三");
// user.setAddress("海南");
// user.setPhone("010");
//
// User user2 = new User();
// user2.setId(2);
// user2.setUsername("李小璐");
// user2.setAddress("天津");
// user2.setPhone("8888888");
//
// List<User> list = new ArrayList<User>();
// list.add(user);
// list.add(user2);
//
// String str = bean2Json(user);
// bean2Json(list);
// System.out.println(str);
//
// String json =
// "{\"address\":\"拾金路\",\"id\":1,\"username\":\"张小宁\",\"phone\":123456789}";
// User u = (User)json2Bean(json,new TypeReference<User>() {
// });
// System.out.println(u);String str="{\"naturalPerson\":{\"queryOrangeScoreDetail\":{\"acctLevel\":null,\"behavPref\":null,\"creditHis\":null,\"mobileNo\":null,\"orangeScore\":null,\"repayCap\":null,\"socialRela\":null,\"updatedAt\":null}}}";Map<String, Object> map = JacksonUtil.json2Map(str, String.class, Object.class);System.out.println(map);}static class User {private int id;private String username;private String address;private String phone;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "id: " + id + " username: " + username + " address: " + address + " phone: " + phone;}}}
另附上jackson的pom依赖
注意三个版本号必须保持一致
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.3</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.3</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.3</version></dependency>
有更好的方案,欢迎留言,再次感谢!
响应对象转json时属性名大小写问题完美解决相关推荐
- fastjson将对象转为json时属性名首字母会默认小写,如何自定义
Java对象属性名 private String SrOrder; 得到的json为srOrder而不是SrOrder,而我们想要SrOrder这个key 只需要在属性名上加上@JSONField(n ...
- 对象转JSON时属性丢失
在fastjson下将对象转json时会丢失部分属性的情况,出现这种情况的问题原因是由于属性命名不符合规范导致,比如:uId,一个字母后面紧跟着一个大写字母,导致反射get/set方法时会出现连续两个 ...
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- 转json_Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- 【关于js数组对象一道题】将数组对象中的英文属性名替换为中文属性名
将数组对象中的英文属性名替换为中文属性名 const arr = [{name: '张三', age: 18, address: '湖北'}, {name: '李四', age: 18, addres ...
- android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...
####问题描述 * java 解析多层含有泛型对象的json数据获取不到泛型类型 * 如果将泛型改成实际的类型就能正常解析 * 如果不改成实际的类型泛型数据被解析成com.google.gson.i ...
- springboot-数据库字段和实体类属性名不对应如何解决?
springboot-数据库字段和实体类属性名不对应如何解决? 我们可以采用:ResultMap结果集映射 来解决这个问题如下: <resultMap id="UserMap" ...
- vmware安装没有足够权限 VMware安装时一直提示没权限完美解决
vmware安装没有足够权限 VMware安装时一直提示没权限完美解决 1.在控制面板\程序\程序和功能删除vmare 2.删除C:\ProgramData\VMware 3.删除C:\Program ...
- js 对象动态添加/设置属性名和属性值
访问对象属性一共有两种方法:点获取法和方括号获取法. 有一个对象 Obj = {"Name":"xiaoming","AGE":" ...
最新文章
- 我理解的 iOS 与 Android 的区别
- mysql adodb_关于从MySQL转向ADODB的方法
- [VMware WorkStation]虚拟机网络
- 作者:房毓菲(1990-),女,就职于国家信息中心信息化研究部,中国智慧城市发展研究中心政策研究组副组长。...
- 为什么 Linux Mint 比 Ubuntu好?
- jq往字符串中插入_jq: dom-插入
- 【模拟】牛客网:顺时打印矩阵
- 【HDOJ7059】Counting Stars(线段树,区间加,乘,标记)
- 详解Python中re.sub
- 开源同步文件软件对比
- Swift 开源项目汇总
- 【Linux】 - Linux中查看命令文档的命令
- 光纤熔接机日常使用说明
- 重定向和转发的区别+使用情景
- 模式识别的概念、方法及应用
- 视频教程-Kali Linux渗透测试基础入门到进阶实战全程课-渗透测试
- hdl语言哪种语言类似c,Verilog HDL笔记
- 深入浅出,五次课程,带您进入数据分析的世界
- Windows10 电脑上配置 Docker 环境
- Bellman算法和SPFA算法
热门文章
- 腐蚀rust服务器命令_腐蚀Rust游戏指令大全 全游戏指令一览
- 安装Chrome失败
- xml文件导入wps_怎么用wpsExcel表打开xml文档
- Android Studio 设置打开layout.xml文件的默认视图
- 画E-R图·数据库笔记(四)
- 华为p6 android4.4,华为P6终于品尝到了安卓4.4.2 可惜……
- 微信网站被误封,不知道为何被封,站长认证一直失败该如何解决?
- 美国访问学者申请签证存款证明相关事宜
- 你想了解的前端知识都在这里了
- keil无法选择单片机类型的问题