|
@@ -19,37 +19,53 @@
|
|
package org.hswebframework.web.dao.mybatis.handler;
|
|
package org.hswebframework.web.dao.mybatis.handler;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.ibatis.type.*;
|
|
import org.apache.ibatis.type.*;
|
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.sql.CallableStatement;
|
|
import java.sql.CallableStatement;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.sql.SQLException;
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Alias("jsonMapHandler")
|
|
@Alias("jsonMapHandler")
|
|
@MappedTypes({Map.class})
|
|
@MappedTypes({Map.class})
|
|
@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.CLOB})
|
|
@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.CLOB})
|
|
|
|
+@Slf4j
|
|
public class JsonMapHandler extends BaseTypeHandler<Map<String, Object>> {
|
|
public class JsonMapHandler extends BaseTypeHandler<Map<String, Object>> {
|
|
|
|
+ private Map<String, Object> parseObject(String json) {
|
|
|
|
+ if (!StringUtils.hasText(json)) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ json = json.trim();
|
|
|
|
+ if (json.startsWith("{")) {
|
|
|
|
+ return JSON.parseObject(json);
|
|
|
|
+ } else if (json.startsWith("[")) {
|
|
|
|
+ JSONArray obj = JSON.parseArray(json);
|
|
|
|
+ log.warn("json format is array ,but result type is object!", json);
|
|
|
|
+ return obj.isEmpty() ? null : obj.getJSONObject(0);
|
|
|
|
+ } else {
|
|
|
|
+ log.warn("parse json array error,maybe it's not json format: {}", json);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Map<String, Object> getResult(ResultSet rs, int columnIndex) throws SQLException {
|
|
public Map<String, Object> getResult(ResultSet rs, int columnIndex) throws SQLException {
|
|
- String s = rs.getString(columnIndex);
|
|
|
|
- return JSON.parseObject(s);
|
|
|
|
|
|
+ return parseObject(rs.getString(columnIndex));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Map<String, Object> getResult(ResultSet rs, String columnName) throws SQLException {
|
|
public Map<String, Object> getResult(ResultSet rs, String columnName) throws SQLException {
|
|
- String s = rs.getString(columnName);
|
|
|
|
- return JSON.parseObject(s);
|
|
|
|
|
|
+ return parseObject(rs.getString(columnName));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Map<String, Object> getResult(CallableStatement cs, int columnIndex) throws SQLException {
|
|
public Map<String, Object> getResult(CallableStatement cs, int columnIndex) throws SQLException {
|
|
- String s = cs.getString(columnIndex);
|
|
|
|
- return JSON.parseObject(s);
|
|
|
|
|
|
+ return parseObject(cs.getString(columnIndex));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|