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

标签 java api debugging javax

我调用 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/

相关文章:

c++ - 程序部署失败

java - 如何阻止 Eclipse 调试我们的库代码

java - 为什么这段代码不起作用?它给我一个错误 "variable h might not have been initialized"

api - 如何通过维基百科 API 在一次地理搜索调用中获取更多信息?

api - 投影仪控制 - RS232/USB?

php - 将 mailgun API 与 codeigniter 结合使用

laravel - Laravel,Openshift和错误消息

java - Spring - 上传表单 - 无法获取文件列表

java - Spring缓存与reflect方法

java - Java 运行时库 (rt.jar) 中的断点