gpt4 book ai didi

java - API 调试。如何查找函数体之前发生的错误?

转载 作者:行者123 更新时间:2023-12-02 11:20:15 25 4
gpt4 key购买 nike

我调用 API 函数,但失败并显示一条消息,例如:

{"error":
{
"message":"The specified operation could not be
completed.",
"detail":"HTTP 403 Forbidden"
}
}

函数体的第一行由断点标记,但从未到达。因此,问题发生在读取 JSON 输入并将其转换为 POJO 时。或者,也许,甚至接近协议(protocol) - 围绕获取请求正文或请求本身。或者,也许是我不知道的某些步骤(我是 API 构建的新手)

记录问题不会有帮助,因为无法访问的第一行就是记录。 如何找到问题所在

编辑:请注意,我并不是在询问这段代码中的错误。 (其中之一是由 Marcus 和 mallikarjun 发现的,我还知道另外一个)我正在询问一些可以让我定位错误的过程。是的,阅读代码总是有帮助的。但往往问题是比较隐蔽的,或者即使作者仔细观察也并不明显。然后我们需要知道错误到底发生在哪里,并且我们希望通过某种自动化的方式找到错误的地方,例如按行调试或插入断言。但我在哪里以及如何才能做到这一点呢?我如何使用运行代码找到这个或类似的问题?

<小时/>

包含示例问题函数的类开始如下:

@Path("/api/v1/documentTypes")
@Api(value = "DocumentTypes")
public class DocumentType {

适当的导入是:

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

该方法的开头看起来是这样的:

@POST
@Consumes(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@Produces(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@ApiOperation(value = "Create a document type",
notes = "creates a document type from Json and returns the created type",
response = Response.class)
@Session(roles = { Role.ROLE_ADMINISTRATOR })
@PublicApi
public Response create(
@ApiParam(value = "Created DocumentType", required = true)
@SwaggerDataType(type =
com.infor.daf.icp.internal.rest.models.DocumentType.class)
com.infor.daf.icp.internal.rest.models.DocumentType documentType
) {
RestHelper.logRequest(request, LOGGER); // Here is the never reached breakpoint

函数的测试 curl 调用:

curl -X POST 
--header 'Content-Type: application/json;charset=utf-8'
--header 'Accept: application/json;charset=utf-8'
-d
'{
"uniqueIdEnabled": "true",
"versionEnabled": "true",
"name": "shortAttempt"
}'
'https://czpanpgangnus1:25000/ca/api/v1/documentTypes'

最佳答案

"detail":"HTTP 403 Forbidden"

您确定您是以管理员身份发布您的请求吗?在

@Session(roles = { Role.ROLE_ADMINISTRATOR })

您声明只有管理员才能使用此功能。我不是curl方面的专家,但你似乎没有在任何地方设定你的角色

关于java - API 调试。如何查找函数体之前发生的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49976114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com