1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 封装自己的api_java api封装工具类实现

java 封装自己的api_java api封装工具类实现

时间:2022-08-24 02:56:37

相关推荐

java 封装自己的api_java api封装工具类实现

最近接手了一个项目,做了前后端分离,前端通过ajax的方式调用后端,后端返回json。

所以在项目中充斥这大量如下所示的代码

User user = UserService.getUser(id);

JSONObject jsonObject = new JSONObject();

if (null != user){

jsonObject.put("name", user.getName());

jsonObject.put("age" , user.getAge());

jsonObject.put("gender", user.getGender());

jsonObject.put("school", user.getSchool());

jsonObject.put("interesting", "foods");

jsonObject.put("city", "beijing");

...

...

...

}

这完全是体力活啊。。。

对于一个有强迫症,并且比较懒的程序媛,那自然不能忍啊,撸起袖子重构重构。

下面就是我的重构代码:

以User类为例:

import com.alibaba.fastjson.JSONObject;

import java.util.Date;

public class User {

private String name;

private Integer age;

private String gender;

private String password;

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

private Date date;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

/**

* filter sensitive fields

* @return

*/

public JSONObject toJsonObject() {

Util u1= new Util<>(this, null);

JSONObject object = u1.defaultWrap();

object.remove("password");

return object;

}

}

下面就是Util类,用了泛型和反射,将User对象的属性和额外添加的属性,组合到一个JSONObject里:

import com.alibaba.fastjson.JSONObject;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Set;

public class Util {

private Bean bean;

private Object object;

public Util(Bean bean, Object object) {

this.bean = bean;

this.object = object;

}

public JSONObject wrap() {

try {

Method m = bean.getClass().getMethod("toJsonObject", new Class[] {});

if(null != m)

{

JSONObject jsonObject = (JSONObject) m.invoke(bean);

return combineData(jsonObject, (JSONObject) object);

}

} catch (Exception e) {

e.printStackTrace();

}

return defaultWrap();

}

public JSONObject defaultWrap() {

JSONObject jsonObject = new JSONObject();

Field[] fields = bean.getClass().getDeclaredFields();//拿到数据成员

//添加bean属性到jsonObject

for(Field f : fields){

try {

String firstLetter = f.getName().substring(0, 1).toUpperCase();

String getter = "get" + firstLetter + f.getName().substring(1);

Method method = bean.getClass().getMethod(getter, new Class[] {});

if(null == method) {

continue;

}

Object value = (Object) method.invoke(bean);

jsonObject.put(f.getName(), value);

} catch (Exception e) {

e.printStackTrace();

}

}

return combineData(jsonObject, (JSONObject) object);

}

public JSONObject combineData(JSONObject container, JSONObject object) {

//添加extra object属性到jsonObject

if (null != object) {

Set keys = object.keySet();

for (String key : keys) {

container.put(key, object.getString(key));

}

}

return container;

}

}

以下就是调用方式:

import com.alibaba.fastjson.JSONObject;

import java.util.Date;

public class Test {

@org.junit.Test

public void test() {

User user = new User();

user.setName("test01");

user.setAge(20);

user.setGender("girl");

user.setDate(new Date());

user.setPassword("fffffffffffffff");

JSONObject jsonObject = new JSONObject();

jsonObject.put("1", "ffffffff");

jsonObject.put("333", "dddddd");

Util u1 = new Util<>(user, jsonObject);

// Util u2 = new Util<>(user, null);

JSONObject obj = (JSONObject) u1.wrap();

System.out.println(obj);

}

}

因为对java了解的不是很深入,不知道这样实现会对性能有多大的影响。后面再持续优化吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。