发表于: 2018-02-01 23:19:11

1 546


一.今日完成

参考开荒组微信支付模块,把基础工具类写完

(1)对于其中Java线程对象和方法调用不甚理解,暂时直接拿来用,知识点之后再仔细学习.

(2)把支付相关的参数放到一个.properities文件里,

在web层的Spring IoC容器里装配成一个Bean:

<bean id="weChatConfig" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<array>
<value>classpath:WXPayConfig.properties</value>
</array>
</property>
<property name="fileEncoding" value="UTF-8"></property>
</bean>

在业务代码里,使用@value注解把相关参数动态绑定进来.例如:

关于@value注解的用法参见http://blog.csdn.net/u010832551/article/details/73826914


(3)在开荒组的项目里,新建一个实体类,但是缺少对应的Service接口,如下:

显然不是利用公司框架代码生成的结果,马正大佬说"用来获取用户微信基本信息,为了方便从json中取对应数据用的",其实也可以把json转化成map,不需要这个实体类.在网上找了教程,学习如何利用GSON把JSON数据转换为map对象,工具类如下:

import java.lang.reflect.Type;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import com.google.gson.Gson;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import com.google.gson.reflect.TypeToken;

/**

 * Json工具类

 * 

 * @author Val

 *

 */

public class JsonUtils {

/**

* 将对象转换成Json字符串

* @param src

* @return

*/

public static String toJson(Object src) {

return GSON.toJson(src);

}

/**

* 将Json转换成对象

* @param json

* @param classOfT

* @return

*/

public static <T> T toEntity(String json, Class<T> classOfT) {

return GSON.fromJson(json, classOfT);

}

/**

* 将Json转化成Map

* @param json

* @return

*/

public static Map<String, ?> toMap(String json) {

return GSON.fromJson(json, MAP_TYPE);

}

/**

* 将Json字符串转化成List

* @param json

* @param typeOfT

* @return

*/

public static <T> List<T> toList(String json, Class<T> typeOfT) {

List<JsonObject> jsonObjectList = GSON.fromJson(json, JSON_OBJECT_TYPE);

List<T> list = new ArrayList<>();

for (JsonObject jsonObject : jsonObjectList) {

list.add(toEntity(jsonObject.toString(), typeOfT));

}

return list;

}

/**

* Json字符串转JsonObject

* @param json

* @return

*/

public static JsonObject toJsonObject(String json) {

return JSON_PARSER.parse(json).getAsJsonObject();

}

/**

* 将JsonObject转换成Json字符串

* @param src

* @return

*/

public static String toJson(JsonObject jsonObject) {

return jsonObject.toString();

}

/**

* 禁止调用无参构造

* @throws Exception

*/

private JsonUtils() throws Exception {

throw new Exception("Error...");

}

private static final Gson GSON = new Gson();

private static final JsonParser JSON_PARSER = new JsonParser();

private static final Type MAP_TYPE = new TypeToken<Map<String, ?>>() {

}.getType();

private static final Type JSON_OBJECT_TYPE = new TypeToken<List<JsonObject>>() {

}.getType();

}


二.明日计划

1.向古城师姐申请设置支付授权目录,网页授权域名和回调接口;

2.把支付用的Controller里的六七个接口业务逻辑写完.


三.遇到问题

在公司框架生成的代码里,有一个工具类SQLUtil#convert2Sql()用来动态拼装SQL语句,除了select语句与各种子句外,还可以拼接出update子句来,但是Service封装的诸多方法里能调用拼装SQL的似乎就下面的两个

而且第一个通过动态条件查询对象,并不好用,查询结果为一Object对象,即使强制使用类型转换,也不甚乐观.

所以如果希望通过调用动态update子句来操作数据库,只能先调用动态select子句找到id,再通过id找到相应对象,调用Setter方法,把修改后的对象update回去.相当麻烦.


四.收获

以上.


返回列表 返回列表
评论

    分享到