前言
我们把一个controller的类里的一个方法叫做action,它实际对应用户看到的一个url。 在action里可以接收各种各样的参数,也可以自己定义需要的参数。 rose自己定义了一些常见的类型,基本上很有机会会用到自己定义,但是在某些情况下,也是个不错的选择: 用来对指定的参数类型的值进行固定的修改和赋值。
例子
public class ChenBeanResolver implements ParamResolver {
@Override
public Object resolve(Invocation inv, ParamMetaData metaData) throws Exception {
for (String paramName : metaData.getParamNames()) {
if (paramName != null) {
Chen chen = new Chen();
String value1 = inv.getParameter("chen1");
String value2 = inv.getParameter("chen2");
chen.setChen1(value1);
chen.setChen2(value2);
return chen;
}
}
return null;
}
@Override
public boolean supports(ParamMetaData metaData) {
return Chen.class == metaData.getParamType();
}
}
上述代码的意思:
如果在action里一个参数的类型是Chen(com.chen.model.Chen),就会走这个resolver,这里对两个参数进行了组装。 用户如果访问的参数里传入了chen1和chen2的值,则会直接组装出来一个Chen对象。
配合上述resolver的action代码为:
@Get("/param")
public String param(Chen chen) throws Exception {
return "@hello world:" + chen.getChen1() + ":" + chen.getChen2();
}