2020-07-22 18:33
@山东小木 我是因为它打印格式化sql时的select xxx,y yy会在log信息后面,要滑动滚动条才能看到,我希望在开发时可以输出我关注的信息,不想看到这一串:[DEBUG]-[Thread: XNIO-1 task-8]-[com.alibaba.druid.filter.logging.Log4jFilter.statementLog()]: {conn-10001, pstmt-20040} executed.。当然,非开发模式启动时我配置了它会使用druid自带的,性能优异。
2020-07-22 08:50
@山东小木 虽然说可以重写controller的方法,使用显示的getXXX方法获取参数,但是我更乐意在方法使用@Para注解自动注入参数,一方面是可为接口测试提供极大的便利,二是减少这类代码,让代码更加清爽
2020-07-22 08:47
@山东小木 我不是这个问题,ParaGeter是将提交的表单数据的数据值转换为对应类型,而我的问题是想在参数获取前对提交数据做预处理,这样在Controller参数注入前屏蔽掉数据特征(比如json、xml、formdata等),这样在controller处理数据时就只需关注数据内容本身。使用baseCOntroller没用,因为人家jfinal参数注入时直接使用的是request.getParaMap,也可能是我没理解木哥的意思。所以,有啥优雅的解决方案吗?
2020-06-03 18:56
public class ApiInterceptor implements Interceptor {
public static final String RENDER_JSON = "json";
private ActionCache action = new ActionCache();
@Override
public void intercept(Invocation invocation) {
// 这里只处理通过返回值返回客户端的数据
ApiController annotation = invocation.getController().getClass().getAnnotation(ApiController.class);
invocation.invoke();
if(null != annotation){
process(invocation , annotation);
}
}
public void process(Invocation invocation, ApiController annotation){
if(action.notReturnVoid(invocation)){
Object returnValue = invocation.getReturnValue();
String renderType = annotation.value().toLowerCase();
if (RENDER_JSON.equals(renderType)){
invocation.getController().renderJson(returnValue);
}
}
}
static class ActionCache{
HashMap mapping = new HashMap<>();
public boolean notReturnVoid(Invocation invocation){
return !isReturnVoid(invocation);
}
public boolean isReturnVoid(Invocation invocation) {
String target = invocation.getActionKey();
if (mapping.containsKey(target)) {
return mapping.get(target);
}else {
boolean isReturnVoid = invocation.getMethod().getReturnType().equals(Void.TYPE);
mapping.put(target, isReturnVoid);
return isReturnVoid;
}
}
}
}