849 Star 3.1K Fork 946

GVPJbootProjects/jboot

jboot(4.1.9)在配置使用Action参数映射时,无法正确获得前端通过POST方式传递的json参数

待办的
创建于  
2025-02-27 11:17

期望的使用方法:

@Log4j2
@RequestMapping("/jboot")
public class JbootTestController extends JbootController {
	public void index() {
		log.debug("run in index....");
		renderText("Hello JFinal World.");
	}

        //Get method
	public void test(String name, String password) {
		log.debug("run in test....");
		renderText("Hello JFinal World. " + name + " " + password);
	}

        //POST method
	public void test2(String value) {
		log.debug("run in test2....");
		renderText("Hello JFinal World. " + value);
	}

        //POST method
	public void test3(DemoObj demoObj) {
		log.debug("run in test3....");
		renderText("Hello JFinal World. " + demoObj.toString());
	}
}

Get方式的可以得能Action参数的值。但post方法的,用上面的使用方法都得不到。(备注: 直接使用jfinal, 是可以正常获取json中的参数值的)

操作步骤基本如下:

  1. 在实现JbootAppListener的主启动类中,在onConstants()方法中,
@Log4j2
public class JbootTest implements JbootAppListener {
	public static void main(String[] args) {
		JbootApplication.createServer(args).start();
	}

	@Override
	public void onConstantConfig(Constants constants) {
		constants.setResolveJsonRequest(true);
	}
}

  1. 通过action来执行,意图获取参数时(/test2方法),得到如下错误提示:
    输入图片说明

可以看到,是因为jboot在调用jfinal的get方法时,因为类型转换出现了问题,
输入图片说明

  1. 我看了一下jfinal及jboot的源码,在ActionHandler类中的handle方法中,发现jfinal中有对json的判断处理,但jboot中却没有。不知道是不是因为这个原因导致的?
    Jfinal:
    输入图片说明

Jboot:
输入图片说明

评论 (1)

颜朋 创建了任务 3个月前
颜朋 修改了描述 3个月前
展开全部操作日志

经过研究与尝试,发现需要如下处理,

  1. 不要设置constants.setResolveJsonRequest(true);
  2. 只通过@JsonBody来获取参数。

建议:jfinal 5.2.1之后,提供了更灵活方式的json形式的action参数注入方式处理,是否可以在jboot的后续版本中,统一或能够简化这种json参数的处理方式。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
颜朋-dbinsight_admin
Java
1
https://gitee.com/JbootProjects/jboot.git
git@gitee.com:JbootProjects/jboot.git
JbootProjects
jboot
jboot

搜索帮助