帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】SQL开发知识:MySQL读取JSON转换的方式

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio
配置完成后,ListFastJsonTypeHandler就会将json转换成javaType对应的对象集合了

方式二:配置一个Mybatis插件,拦截ResultSetHandler,将返回结果进行处理。 这样的好处就是不用写自定义的处理器和在XxxMapper.xml中做配置,减少了工作


@Component
@Intercepts({
@Signature(type = ResultSetHandler.class, method = “handleResultSets”, args = {Statement.class})
})
public class ResultSetInterceptor implements Interceptor {


private final SerializerFeature[] serializerFeatures = {
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullStringAsEmpty
};
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object proceed = invocation.proceed();
if (containJSONObject(proceed)) {
if (proceed instanceof Collection) {
return JSON.parseArray(JSON.toJSONString(proceed, serializerFeatures), ((Collection<?>) proceed).toArray()[0].getClass());
}
return JSON.parseObject(JSON.toJSONString(proceed, serializerFeatures), proceed.getClass());
}
//if (proceed instanceof Collection) {
//for (Object obj : ((Collection<?>) proceed)) {
//parseJSON2Object(obj, obj.getClass());
//}
//} else {
//parseJSON2Object(proceed, proceed.getClass());
//}
return proceed;
}
* 将返回数据中心的JSONObject对象转换成正常的对象
*
* @param obj
* @param typeClass
* @throws IllegalAccessException
* @throws ClassNotFoundException
private void parseJSON2Object(Object obj, Class<?> typeClass) throws IllegalAccessException, ClassNotFoundException {
for (Field declaredField : typeClass.getDeclaredFields()) {
declaredField.setAccessible(true);
Object value = declaredField.get(obj);
if (isNullValueField(value)) {
continue;
Type genericType = declaredField.getGenericType();
String fieldClassName = genericType.getTypeName();
if (genericType instanceof ParameterizedType) {
fieldClassName = ((ParameterizedType) genericType).getActualTypeArguments()[0].getTypeName();
if (containJSONObject(value)) {
if (value instanceof Collection) {
declaredField.set(obj, JSON.parseArray(JSON.toJSONString(value, serializerFeatures), Class.forName(fieldClassName)));
} else {
declaredField.set(obj, JSON.parseObject(JSON.toJSONString(value, serializerFeatures), Class.forName(fieldClassName)));
}
* 判断是否跳过字段
* @param value
* @return
private Boolean isNullValueField(Object value) {
return null == value || “”.equals(String.valueOf(value).trim())
|| (value instanceof Collection && ((Collection<?>) value).size() == 0);
* 判断值是否包含JSONObject对象
private boolean containJSONObject(Object value) throws IllegalAccessException {
if (isNullValueField(value)) {
return false;
if (value instanceof Collection) {
for (Object obj : (Collection<?>) value) {
if (obj instanceof JSONObject) {
return true;
if (obj instanceof Collection && containJSONObject(obj)) {
for (Field declaredField : obj.getClass().getDeclaredFields()) {
declaredField.setAccessible(true);
Object fieldValue = declaredField.get(obj);
if (isNullValueField(fieldValue)) {
continue;
}
if (fieldValue instanceof JSONObject) {
return true;
if (fieldValue instanceof Collection && containJSONObject(fieldValue)) {
}
return value instanceof JSONObject;
}

到此这篇关于MySQL读取JSON转换的文章就介绍到这了,更多相关MySQL读取JSON转换内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


联系我们
返回顶部