Skip to content

[bug] 远程函数调用拿不到请求体中数据 #281

Closed

Description

@jerrylususu

环境信息

  • 系统: Windows 10
  • JDK: 13
  • 数据库: MySQL 5.7
  • APIJSON: 4.7.0

问题描述

使用 APIJSONBoot 示例项目,在 POST Moment 时,pictureList 输入错误的 URL 列表,请求依然成功。但是根据 Request 表中相关行,pictureList 应该会被远程函数 verifyURLList 进行验证。在 verifyURLList 函数下断点,发现调用时 current 为一个空 JSONObject,即请求体没有被正确传入。

错误信息

请求与响应
image

断点截图
image

原始请求体

{
 "Moment":{
      "content":"今天天气不错,到处都是提拉米苏雪",
      "userId":1627466921423,
      "pictureList": ["111:/222"]
 },
  "tag":"Moment"
}

Activity

  1. jerrylususu commented on Jul 30, 2021

    @jerrylususu
    ContributorAuthor

    另外顺便询问下,在 POST/PUT 中如果远程函数返回 null,是否远程函数的 key 就不会出现在最后的 SQL 中?我在尝试实现一个比较复杂的鉴权逻辑,需要在 POST/PUT 的时候调用远程函数完成鉴权,现在是如果鉴权成功返回 null,鉴权失败就抛异常,这样实现是否符合 APIJSON 的要求?

  2. TommyLemon commented on Jul 31, 2021

    @TommyLemon
    Member

    确实有这个 bug,应该是最近的版本新出现的,感谢反馈。

  3. TommyLemon commented on Jul 31, 2021

    @TommyLemon
    Member

    另外顺便询问下,在 POST/PUT 中如果远程函数返回 null,是否远程函数的 key 就不会出现在最后的 SQL 中?我在尝试实现一个比较复杂的鉴权逻辑,需要在 POST/PUT 的时候调用远程函数完成鉴权,现在是如果鉴权成功返回 null,鉴权失败就抛异常,这样实现是否符合 APIJSON 的要求?

    不管返回什么都不会用于生成 SQL 。这个鉴权方式可以,保证是同步调用即可(不能用其它线程异步操作)

  4. TommyLemon commented on Jul 31, 2021

    @TommyLemon
    Member

    某个优化性能的版本改出了 bug,AbstractObjectParser.onFunctionResponse 这里需要回滚下

    			//			JSONObject json = "-".equals(type) ? request : response; // key-():function 是实时执行,而不是在这里批量执行
    
    			for (Entry<String, String> entry : functionSet) {
    
    				//				parseFunction(json, entry.getKey(), entry.getValue());
    				parseFunction(entry.getKey(), entry.getValue(), parentPath, name, response);
    			}

    改为

                            JSONObject json = "-".equals(type) ? request : response; 
    
    			for (Entry<String, String> entry : functionSet) {
    				parseFunction(entry.getKey(), entry.getValue(), parentPath, name, json);
    			}

    https://github.com/Tencent/APIJSON/blob/4f4a197a65f90b648ed84ca6e9e8df5d53130c0a/APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java

    image

    回滚后就正常了
    image

  5. TommyLemon commented on Jul 31, 2021

    @TommyLemon
    Member

    已解决
    3ccd967

  6. TommyLemon commented on Jul 31, 2021

    @TommyLemon
    Member
  7. jerrylususu commented on Jul 31, 2021

    @jerrylususu
    ContributorAuthor

    4.7.2 验证已解决。感谢帮助!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions