NutzCN Logo
问答 拦截器如何获取当前方法的(形参参数值)
发布于 2332天前 作者 qq_5a88e4e5 1776 次浏览 复制 上一个帖子 下一个帖子
标签:

拦截器如何获取当前方法的(形参参数值)

10 回复

值不是问题,你想要的是形参的名字吧?

名字对应值 map格式的

MethodParamNamesScaner.getParamNames 能拿到形参名的列表, 配合参数列表, 就能组成Map咯

做处理器会更方便一些, 因为初始化处理器的时候会传入ActionInfo, 然后ActionInfo有getParamNames方法

处理器可单独对指定的方法起作用么?????

能, 支持配多个动作链, 然后在不同的方法/类用不同的链

package com.lx.demo.chain;

import com.lx.demo.processor.MyProcessor;
import org.nutz.mvc.*;
import org.nutz.mvc.impl.NutActionChain;
import org.nutz.mvc.impl.processor.*;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2018/6/14.
 */
public class MyActionChainMaker implements ActionChainMaker {
    @Override
    public ActionChain eval(NutConfig config, ActionInfo ai) {
        ai.setChainName();//使用这个确认@Chain 注解的value么
        List<Processor> list = new ArrayList<>();
        list.add(new UpdateRequestAttributesProcessor()); // 设置base/msg等内置属性
        list.add(new EncodingProcessor()); // 设置编码信息@Encoding
        list.add(new ModuleProcessor()); // 获取入口类的对象,从ioc或直接new
        list.add(new ActionFiltersProcessor()); // 处理@Filters
        list.add(new AdaptorProcessor()); // 处理@Adaptor
        list.add(new MethodInvokeProcessor()); // 执行入口方法
        list.add(new ViewProcessor()); // 对入口方法进行渲染@Ok
        list.add(new MyProcessor());
        for (Processor p : list) {
            try {
                p.init(config, ai);
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }

        // 最后是专门负责兜底的异常处理器,这个处理器可以认为是全局异常处理器,对应@Fail
        Processor error = new FailProcessor();
        try {
            error.init(config, ai);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return new NutActionChain(list, error, ai);
    }
}

是ai.getChainName

添加回复
请先登陆
回到顶部