我发现,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":"黄色"} , 而是转换失败,报错提醒。