发表于: 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回去.相当麻烦.
四.收获
以上.
评论