RESTful接口开发(二)
前言
上次说到了Spring Boot框架环境下的RESTful接口开发,其实是很简单的,这种简单的开发也能够返回数据给前端,现在我们再来看一下RESTful接口开发工具,这个工具就类似于codegenerator,可以根据数据类型生成代码,因为我是使用Vscode工具的,所以我利用的其实就是里面提供的插件版qiucktype。今天呢,我们就分享一下如何利用插件版的quicktype将不同类型的json数据生成代码,并且通过response层反馈给前端。
一、怎么操作quicktype?
1.在安装插件版的quicktype后,我们先建立.json格式的文件。
2.键入CTRL + shift + p打开命令栏。
3.输入Open quicktype for JSON。
4.转换
例如
[{"name":"Jeason","sex":"man"},{"name":"Tom","sex":"man"}]
输出代码
package io.quicktype;
import java.util.Map;
public class Code {
private String name;
private String sex;
public String getName() { return name; }
public void setName(String value) { this.name = value; }
public String getSex() { return sex; }
public void setSex(String value) { this.sex = value; }
}
我们可以写一个response工具类,然后返回数据给前端。
二、转换案例
1.复杂List
{
"users": [
{
"userName": "Jon",
"email": "jon@arbuckle.com",
"pets": [
{
"name": "Garfield",
"species": "cat"
},
{
"name": "Odie",
"species": "dog"
}
]
}
]
}
package io.quicktype;
import java.util.Map;
public class Code {
private User[] users;
public User[] getUsers() { return users; }
public void setUsers(User[] value) { this.users = value; }
}
// User.java
package io.quicktype;
import java.util.Map;
public class User {
private String userName;
private String email;
private Pet[] pets;
public String getUserName() { return userName; }
public void setUserName(String value) { this.userName = value; }
public String getEmail() { return email; }
public void setEmail(String value) { this.email = value; }
public Pet[] getPets() { return pets; }
public void setPets(Pet[] value) { this.pets = value; }
}
// Pet.java
package io.quicktype;
import java.util.Map;
public class Pet {
private String name;
private String species;
public String getName() { return name; }
public void setName(String value) { this.name = value; }
public String getSpecies() { return species; }
public void setSpecies(String value) { this.species = value; }
}
2.复杂Map情况
{
"HeWeather6": [
{
"basic": {
"cid": "CN101010100",
"location": "北京",
"parent_city": "北京",
"admin_area": "北京",
"cnty": "中国",
"lat": "39.90498734",
"lon": "116.40528870",
"tz": "8.0"
},
"daily_forecast": [
{
"cond_code_d": "103",
"cond_code_n": "101",
"cond_txt_d": "晴间多云",
"cond_txt_n": "多云",
"date": "2017-10-26",
"hum": "57",
"pcpn": "0.0",
"pop": "0",
"pres": "1020",
"tmp_max": "16",
"tmp_min": "8",
"uv_index": "3",
"vis": "16",
"wind_deg": "0",
"wind_dir": "无持续风向",
"wind_sc": "微风",
"wind_spd": "5"
},
{
"cond_code_d": "101",
"cond_code_n": "501",
"cond_txt_d": "多云",
"cond_txt_n": "雾",
"date": "2017-10-27",
"hum": "56",
"pcpn": "0.0",
"pop": "0",
"pres": "1018",
"tmp_max": "18",
"tmp_min": "9",
"uv_index": "3",
"vis": "20",
"wind_deg": "187",
"wind_dir": "南风",
"wind_sc": "微风",
"wind_spd": "6"
},
{
"cond_code_d": "101",
"cond_code_n": "101",
"cond_txt_d": "多云",
"cond_txt_n": "多云",
"date": "2017-10-28",
"hum": "26",
"pcpn": "0.0",
"pop": "0",
"pres": "1029",
"tmp_max": "17",
"tmp_min": "5",
"uv_index": "2",
"vis": "20",
"wind_deg": "2",
"wind_dir": "北风",
"wind_sc": "3-4",
"wind_spd": "19"
}
],
"status": "ok",
"update": {
"loc": "2017-10-26 23:09",
"utc": "2017-10-26 15:09"
}
}
]
}
package io.quicktype;
import java.util.Map;
public class Code {
private HeWeather6[] heWeather6;
public HeWeather6[] getHeWeather6() { return heWeather6; }
public void setHeWeather6(HeWeather6[] value) { this.heWeather6 = value; }
}
// HeWeather6.java
package io.quicktype;
import java.util.Map;
public class HeWeather6 {
private Basic basic;
private Map<String, String>[] dailyForecast;
private String status;
private Update update;
public Basic getBasic() { return basic; }
public void setBasic(Basic value) { this.basic = value; }
public Map<String, String>[] getDailyForecast() { return dailyForecast; }
public void setDailyForecast(Map<String, String>[] value) { this.dailyForecast = value; }
public String getStatus() { return status; }
public void setStatus(String value) { this.status = value; }
public Update getUpdate() { return update; }
public void setUpdate(Update value) { this.update = value; }
}
// Basic.java
package io.quicktype;
import java.util.Map;
public class Basic {
private String cid;
private String location;
private String parentCity;
private String adminArea;
private String cnty;
private String lat;
private String lon;
private String tz;
public String getCid() { return cid; }
public void setCid(String value) { this.cid = value; }
public String getLocation() { return location; }
public void setLocation(String value) { this.location = value; }
public String getParentCity() { return parentCity; }
public void setParentCity(String value) { this.parentCity = value; }
public String getAdminArea() { return adminArea; }
public void setAdminArea(String value) { this.adminArea = value; }
public String getCnty() { return cnty; }
public void setCnty(String value) { this.cnty = value; }
public String getLat() { return lat; }
public void setLat(String value) { this.lat = value; }
public String getLon() { return lon; }
public void setLon(String value) { this.lon = value; }
public String getTz() { return tz; }
public void setTz(String value) { this.tz = value; }
}
// Update.java
package io.quicktype;
import java.util.Map;
public class Update {
private String loc;
private String utc;
public String getLOC() { return loc; }
public void setLOC(String value) { this.loc = value; }
public String getUTC() { return utc; }
public void setUTC(String value) { this.utc = value; }
}
我们看一下具体数据的代码
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (int i = 0; i < twos.size(); i++) {
two = twos.getJSONObject(i);
Map<String, String> map = new HashMap<String, String>();
map.put("天气情况", twos.get("cond_txt_d").toString());
map.put("最高温度", twos.get("tmp_max").toString());
map.put("风力情况", twos.get("wind_sc").toString());
list.add(map);
}
System.out.println(list.toString());
//上面复杂的结构在测试时加入相关数据
总结
使用quicktype是非常简单的,能够极大地减少代码量,解放了程序员编程的疲惫性,能让程序员工作在解决难题的基础上,而不是大量堆砌重复代码,那我们也能够学到更加有用的知识。