从顶点休息资源 class 获取请求 body

Getting request body from apex Rest Resource class

我在 apex 中创建了一个休息资源,我通过 GET 请求通过 body 通过 post man 传递了一个 id。然后我反序列化 body,即使我提供了 id,我也得到了一个空字符串。下面的代码。

// 其余资源代码,更多代码,但我认为这是重要的东西

String res = RestContext.Request.requestBody.toString();
if(res == ''){
   response.statusCode = 400;
   return;
}
HogtieDTO.getDeviceRequestInfoResponse resData = (
          HogtieDTO.getDeviceRequestInfoResponse)JSON.deserialize( 
          RestContext.Request.requestBody.toString(), 
          HogtieDTO.getDeviceRequestInfoResponse.class
      );

//HogtieDTO class

public with sharing class HogtieDTO {
    public class getDeviceRequestInfoResponse {
        public String customerId;
    }
}

// post 人

我拨打这个电话后收到 401。

我可以通过参数传递它来使其工作,但我试图通过 body.

使其工作

评论多于回答,但太长了。

passing in an id through the body through post man via GET request

如果是 GET 请求 - Postman 应该忽略 body,GET 只使用 url/uri/whatever 是正式名称。确保它是一个 POST 并且你的函数也被注释为 @HttpPost @ReadOnly global static String doPost()

I get the 401

401 未授权。你确定你通过了Authorization Bearer <session id / access token goes here>header?错误响应是 header 还是 body?您的用户个人资料是否允许访问 class 并且您使用的连接的应用程序具有 api 访问范围?

401 甚至在您的代码有机会 运行 之前就会启动,它甚至不在列表中(https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_methods.htm 滚动到底部)。你确定是 运行 吗?您在调试日志中看到了什么吗?

Also, If someone could answer when you would have an Id in the path vs body that would be awesome

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_code_sample_basic.htm 包含注释为 @httpget 的示例方法,并使用 req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);

从请求的 /services/apexrest/Account/001... 解析帐户 ID