jfinal接受请求自动封装成map类型

在jfinal的contrller中如何将请求中的的key和value自动封装到controller的形参map中,方法签名如下

public class ApiController extends Controller {
  public void index(Map<String,String> params) {
    
  }


评论区

JFinal

2020-01-16 14:56

Map 参数还没有提供支持,但很容易扩展:
1: 参考 com.jfinal.core.paragetter.IntegerGetter.java 实现一个 MapGetter
里头的核心代码是:
public Map get(Action action, Controller c) {
return c.getKv(getParameterName(), getDefaultValue());
}

2: 注册一下这个扩展:
ParaProcessorBuilder.me().regist(Map.class, MapGetter.class, ....);

李通

2020-01-16 16:41

map类型特殊,我在注册时出现错误
code
ParaProcessorBuilder.me.regist(Map.class, MapGetter.class,null);
error
The method regist(Class, Class>, String) in the type ParaProcessorBuilder is not applicable for the arguments (Class, Class, null)
归根结底是
Map.class;不是正确的语法,错误提示如下
Syntax error, insert "AssignmentOperator Expression" to complete Expression
但是Integer.class是正确的语法
fastjson为了解决这个问题引入了TypeReference

JFinal

2020-01-16 18:55

@李通 单步调试一下,我给出的代码是示例,要注意具体实现时的细节

杜福忠

2020-01-16 19:01

@李通 直接转成JSONObject不是更香?
index(JSONObject kv) {...

https://gitee.com/yun_final/JFinal-API/blob/master/src/main/java/com/yunfinal/api/service/ApiJsonGetter.java

李通

2020-01-16 20:13

@jfinal能不能提供一个更为详细的实例,我试了很多办法都行不通。

李通

2020-01-31 17:01

@JFinal 我使用你的方法多次测试都不可行,但是我使用下面的代码可行,分享一下
public class EchoController extends Controller {
public void index() {
Kv kv = getKv();
HashMap params = (HashMap) kv;
renderJson(params);
}
}

热门反馈

扫码入社