return inVl.getValueAsObject(paraName);
}
protected Object resolveRequestParamExt(String miType,PlatformRequest platformRequest, String paramName,
String defaultValue,MethodParameter methodParam,NativeWebRequest webRequest, Object handler)throws Exception{
if(StringUtils.isBlank(paramName)){
paramName = defaultValue;
}
Class< > paramType = methodParam.getParameterType();
DatasetList inDl = platformRequest.getDatasetList();
VariableList inVl = platformRequest.getVariableList();
if(RequestParamExt.TYPE_DS.equals(miType)){//绑定的关键过程
Dataset ds = inDl.getDataset(paramName);
Object vo = paramType.newInstance();
MiPDataBinder dataBinder = new MiPDataBinder(vo, false);
dataBinder.bind(inVl);
return dataBinder.getTarget();
}
}
同时还需要一个annotation的定义:示例如下:
package com.company.springext.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParamExt {
public static final String TYPE_NONE = "none";
public static final String TYPE_DS = "ds";
public static final String TYPE_VL = "vl";
public static final String TYPE_STR = "string";
String type() default TYPE_NONE;
String value() default "";
String defaultValue() default "ds";
}
最后是修改Spring配置:
到此就实现了自定义格式的数据绑定。
对于特定格式的输出,如果需要自定义的话,同样需要修改AnnotationMethodHandlerAdapterExt.java这个类,关键位置在getModelAndView()方法。在如下位置:
} else if (AnnotationUtils.findAnnotation(handlerMethod, ResponseBody.class) != null) {
handleResponseBody(returnValue, webRequest);
return null;
}
添加自己的扩展方法:
else if (AnnotationUtils.findAnnotation(handlerMethod, ResponseBodyExt.class) != null) {
ResponseBodyExt bodyMi = AnnotationUtils.findAnnotation(handlerMethod, ResponseBodyExt.class);
handleResponseBodyExt(returnValue, webRequest, bodyMi);
return null;
}
定义handleResponseBodyExt方法:
private void handleResponseBodyExt(Object returnValue, ServletWebRequest webRequest, ResponseBodyMI bodyMi) throws Exception {
HttpServletResponse servletResponse = (HttpServletResponse) webRequest.getNativeResponse();
writeWithExtConverters(returnValue, servletResponse, bodyMi);
}
writeWithExtConverters()方法如下:
private void writeWithExtConverters(Object returnValue, HttpServletResponse response, ResponseBodyMI bodyMi) throws Exception {
convertToXML(...);
};
使用方式如下:
@RequestMapping(value="/getContractList")
@ResponseBodyExt(isCheck=true, resultType="sql", sqlColumns="ID,TUREID")
public Page
Page
return page;
}
作者“菜园子”