我发现,jfinal5.0.0 以及之后的版本中。如下的代码块。会造成请求时, 参数名字和参数内部的字段名字冲突时, 导致无法自动转换的情况。
private T resolveJson(JsonRequest req) {
com.alibaba.fastjson.JSONObject jsonObj = req.getJSONObject();
if (jsonObj == null) {
return toList(req.getJSONArray());
}
String paraName = this.getParameterName();
if (jsonObj.containsKey(paraName)) {
// 存在与 action 形参名相同的 request 参数则使用其 value 值进行转换
return jsonObj.getObject(paraName, beanClass);
} else {
// 否则使用整个请求中的 json 进行转换
return jsonObj.toJavaObject(beanClass);
}
}这段代码在BeanGetter类的滴60行开始到第74行结束。
比如, 我定义一个Color类, 里面有个参数叫 color。 这时候, 如果我的参数名是 Color color , 此时就没法直接拿到前端传过来的{"color":"黄色"} , 而是转换失败,报错提醒。