変換jsonツール

2739 ワード

インタフェースドキュメントを書くたびに、json形式の戻り結果を書くか、パラメータを受け入れるたびに、オブジェクトをインスタンス化し、各フィールドにセットしてからjsonに変換するのは面倒なので、ツールクラスを書いて、直接jsonを変換するのは簡単ですjavaです.lang.reflectバッグでいいです.
private static Object format(Class clazz)
      throws IllegalAccessException, InstantiationException, InvocationTargetException {
    Object instance = clazz.newInstance();
    Field[] declaredFields = clazz.getDeclaredFields();
    for (Field field : declaredFields) {
      String name = field.getName();
      Class> type = field.getType();
      String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
      Method method = null;
      try {
        method = clazz.getDeclaredMethod(methodName, type);
      } catch (NoSuchMethodException e) {
        continue;
      }
      if (type.isAssignableFrom(String.class)) {
        method.invoke(instance, name);
      } else if (type.isAssignableFrom(Integer.class)) {
        method.invoke(instance, 1);
      } else if (type.isAssignableFrom(Long.class)) {
        method.invoke(instance, 1L);
      } else if (type.isAssignableFrom(Double.class)) {
        method.invoke(instance, 1.0);
      } else if (type.isAssignableFrom(Float.class)) {
        method.invoke(instance, 1.0f);
      } else if (type.isAssignableFrom(Short.class)) {
        method.invoke(instance, 1);
      } else if (type.isAssignableFrom(Character.class)) {
        method.invoke(instance, '1');
      } else if (type.isAssignableFrom(Boolean.class)) {
        method.invoke(instance, true);
      } else if (type.isAssignableFrom(Date.class)) {
        method.invoke(instance, new Date());
      } else if (type.isAssignableFrom(List.class)) {
        Type genericType = field.getGenericType();
        if (ParameterizedType.class.isAssignableFrom(genericType.getClass())) {
          for (Type t1 : ((ParameterizedType) genericType).getActualTypeArguments()) {
            Object newInstance = ((Class) t1).newInstance();
            newInstance = format(newInstance.getClass());
            List list = Arrays.asList(newInstance);
            method.invoke(instance, list);
          }
        }
      } else {
        Object newInstance = type.newInstance();
        newInstance = format(newInstance.getClass());
        method.invoke(instance, newInstance);
      }
    }
    return instance;
  }

対象を得た後は、自分のエンジニアリングのjsonバッグでstringに変換すればいいです.私が使っているのはGsonです.
 private static String beanToJson(Class clazz)
      throws IllegalAccessException, InvocationTargetException, InstantiationException {
    Gson gson = new Gson();
    String json = gson.toJson(format(clazz));
    return json;
  }

既製のバッグやもっと良い方法があるかどうか分かりませんが、ドキュメントを書くときに使うだけで、時間を節約できます.