今天碰到需求需要定时从远程服务端获取数据,使用的是springboot的restTemplate类,接收到的是一个很长的json串,现在需要将这个字符串中需要的数据提出出来,并转成java bean。远程服务端返回的数据类型如下
public class ResponseData implements Serializable{ private static final long serialVersionUID = 529851007524870481L; private String code;//成功的状态码,默认:0 private String msg;//状态信息的字段名称,默认:msg private int count;//数据总数的字段名称,默认:count private Object data;//数据列表的字段名称,默认:data }
大概过程就是springboot后台发送了http请求后查询数据库,然后将查询得到的值存放到ResponseData的data字段中,并设置查询成功的code字符为“200”
本地服务端接收到的字符串为如下形式:
{"code":"200","msg":null,"count":0,"data":[{"id":2927,"createTime":"2020-12-25 11:08:48","updateTime":"2020-12-26 09:38:58","accountAccount":"FHTJO002","password":null,"realname":"XXX","clientRemark":"远程"},{"id":2926,"createTime":"2020-10-18 11:38:16","updateTime":"2020-12-22 21:13:32","accountAccount":"FKOPU999","password":null,"realname":"YYY","clientRemark":""},......]}
现在先将data字段分离出来,直接上代码,如下:
//发送http请求过程,此处不是重点 RestTemplate restTemplate = new RestTemplate(); String forObject = restTemplate.getForObject("http://100.255.255.255:8080/client/getClientList",String.class); System.out.println(forObject); //以下为转换过程 JSONObject jsonObject=JSON.parseObject(forObject); String code=jsonObject.getString("code"); System.out.println("code:"+code); String dataStr=jsonObject.getString("data"); System.out.println("dataStr:"+dataStr); //data字段为一个数组形式,故是如下转换 JSONArray jsonArray=JSON.parseArray(dataStr);
接下来就是json对象转java bean了,定义的java bean如下,使用了lombok注解
@Getter @Setter @ToString public class ClientInfo extends BaseEntity<Long> { private static final long serialVersionUID = 668510116139758104L; private String accountAccount;//账号 private String password;//密码 private String realname;//姓名 private String clientRemark;//备注 }
接下来就是转换代码,
System.out.println("jsonArray的长度:"+jsonArray.size()); System.out.println("jsonArray:"+jsonArray); System.out.println("jsonArray.getobject[0]:"+jsonArray.getJSONObject(0)); System.out.println("jsonArray.getobject[1]:"+jsonArray.getJSONObject(1)); System.out.println("jsonArray.getobject[2]:"+jsonArray.getJSONObject(2)); //此处为关键转换步骤 ClientInfo clientInfo=JSON.parseObject(jsonArray.getJSONObject(0).toJSONString(), new TypeReference<ClientInfo>() {}); System.out.println("clientInfo:"+clientInfo.toString());