2022-08-08 18:24
@JFinal 好的,非常感谢。第三个就是Model + (Db + Record)的混合体,不需要做绑定,但同时又用上了Model的getter/setter的便利,而不是大量字符串常量。
2020-03-27 10:06
@无翼 PageParaGetter存在扩展性的小问题(你的项目没用到,所以其实目前为止肯定是没问题的),如果controller的入参声明为BasePageRequest>这种TypedParameter比较复杂的时候,会出问题,要么can not cast to JSONObject,要么expect '[', but {, 所以如果使用这个PageParaGetter来接收List,要将它放到一个对象里面包装一下,如BasePageRequest, 然后public class SomeListParam{List list;},或者修改PageParaGetter进行支持.另一个小问题是结构被改变了,入参的结构与接收的BasePageRequest结构不一致,与项目新人交接的时候可能需要解释一下.
2020-03-27 09:59
@无翼 @JFinal 翻了一下JFinal的源码,参照ParaProcessorBuilder的createParaGetter方法可知 @无翼 的这个方案是可靠的,ParaProcessorBuilder的createParaGetter方法优先取对应class的Getter然后再取内置getter,不过从这里也看出需要提前注册自定义的Getter到ParaProcessorBuilder,即ParaProcessorBuilder.me.regist,只有注册了的类可以正确转换,接近完美了,只差在有子类的情况下如果只注册父类是不够的,需要每一个具体的类都注册一下,在项目的Config入口注册就行了.如果改造BeanGetter/ModelGetter则不需要注册,但改造BeanGetter/ModelGetter会相对麻烦些.非常感谢.
2020-03-15 18:44
@JFinal 实测还是有影响的:
@Override
public void tryGeneric(Class clz) {
}
这样写会提示未实现父类方法,必须要一致一签名才算覆盖.一个不那么漂亮但可行的方案是为Bean/ModelGetter添加字段,为controller添加Type入参的方法,在ParaProcessorBuilder通过setter将parameterized的字段设值,然后在controller的getBean/getModel方法调用新加的支持泛型的方法.