public class BaseModelMethodArgumentResolver implementsHandlerMethodArgumentResolver {
@Overridepublic booleansupportsParameter(MethodParameter methodParameter) {if (methodParameter.hasParameterAnnotation(UpdateRequestBody.class)) {//集合
if(List.class.isAssignableFrom(methodParameter.getParameterType())){
ParameterizedType parameterizedType=(ParameterizedType) methodParameter.getGenericParameterType();
Class clazz= (Class)parameterizedType.getActualTypeArguments()[0];//取出List中的真实对象类型
if(BaseModel.class.isAssignableFrom(clazz)){return true;
}else{return false;
}
}else{//单个对象
if(BaseModel.class.isAssignableFrom(methodParameter.getParameterType())){return true;
}else{return false;
}
}
}return false;
}
@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throwsException {
String body= "";try{
HttpServletRequest request= nativeWebRequest.getNativeRequest(HttpServletRequest.class);
body=CommonUtil.getBodyString(request);
}catch(Exception e) {
e.printStackTrace();
}if(List.class.isAssignableFrom(methodParameter.getParameterType())){
List resultList= newArrayList();
ParameterizedType parameterizedType=(ParameterizedType) methodParameter.getGenericParameterType();
Class clazz= (Class)parameterizedType.getActualTypeArguments()[0];
List fs =Arrays.asList(clazz.getDeclaredFields());
JSONArray array=JSONArray.parseArray(body);for(Object temp:array) {
JSONObject obj=JSONObject.parseObject(temp.toString());
List updateFieldList = new ArrayList<>();for(String key : obj.keySet()) {for(Field filed : fs) {if(key.toLowerCase().equals(filed.getName().toLowerCase())) {
updateFieldList.add(key.toLowerCase());continue;
}
}
}
obj.put("updateFieldList",updateFieldList);
resultList.add(obj);
}returnJSONArray.parseArray(resultList.toString(),clazz);
}else{
Class clazz=methodParameter.getParameterType();
List updateFieldList = new ArrayList<>();
List fs =Arrays.asList(clazz.getDeclaredFields());
JSONObject obj=JSON.parseObject(body);for(String key : obj.keySet()) {for(Field filed : fs) {if(key.toLowerCase().equals(filed.getName().toLowerCase())) {
updateFieldList.add(key.toLowerCase());continue;
}
}
}
obj.put("updateFieldList",updateFieldList);returnJSON.parseObject(obj.toString(),clazz);
}
}
}