当前位置: 首页 > 知识库问答 >
问题:

如何对接受参数的方法进行REST API调用

车靖琪
2023-03-14

我对做api调用还是个新手。我得到了一个生成token的Java类。我曾被要求构建一个web服务,该服务使用以下方法对SecurityUtil.CalculateAuthorizationSignature(字段、clientId、clientSecret)方法进行api调用

参数,而不是像下面的类中所示的那样对它们进行硬编码:

公共类SecurityUtil{public static void main(String[]args){

    String[] fields = new String[3];

//POC+100+05QQAWQERQWHYTFDYUSWY

    fields[0] = "POC";
    fields[1] = "100";
    fields[2] = "05QQAWQERQWHYTFDYUSwY2";

    String clientId = "dfaaa525-704c-41f4-9d95-7983f9bee18d";
    String clientSecret = "6r9186uxrt031lw0diivck9noma1onfq";

    String signatureStr = new SecurityUtil()
            .calculateAuthorizationSignature(fields, clientId, clientSecret);

    System.out.println(signatureStr);
}

public String encodeBase64(String val) {
    return Base64.getEncoder().encodeToString(val.getBytes());
}

public String decodeBase64(String val) throws UnsupportedEncodingException {
    return new String(Base64.getDecoder().decode(val), "ASCII");
}

public String hmacSha256(String val, String key) {
    return new HmacUtils(HmacAlgorithms.HMAC_SHA_256, key).hmacHex(val);
}

public String calculateAuthorizationSignature(String[] fields, String id, String secret) {
    StringBuilder sb = new StringBuilder();
    boolean addSeparator = false;
    for (String s : fields) {
        if (addSeparator) {
            sb.append("+");
        }
        sb.append(s);
        addSeparator = true;
    }

    String serverSignature = hmacSha256(sb.toString(), secret);
    String clientId = encodeBase64(id);

    Instant instant = Instant.now();
    Long timeStampMillis = instant.getEpochSecond();
    String timeStamp = encodeBase64(String.valueOf(timeStampMillis));

    String cipher = serverSignature + "." + timeStamp + "." + clientId;
    return encodeBase64(cipher);
}

}

我正在使用spring boot,我的pom文件如下所示:

https://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 org.springframework.Boot spring-boot-starter-parent 2.2.2.release com.abelinho.securityutil secutildemo 0.0.1-spring boot secutildemo演示项目快照

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

null

而我的项目结构如下所示:

1

好心帮忙。谢谢伙计们!

共有1个答案

钱峻
2023-03-14

要进行API调用,您需要使用任何http客户端(如RestTemplate或FeignClient)使用rest template您可以调用API,

  fields[0] = "POC";
  fields[1] = "100";
  fields[2] = "05QQAWQERQWHYTFDYUSwY2";

  String clientId = "dfaaa525-704c-41f4-9d95-7983f9bee18d";
  String clientSecret = "6r9186uxrt031lw0diivck9noma1onfq";

    public String copyAssests(String clientId , String clientSecret, String[] fields) {
        return restTemplate.exchange("url", HttpMethod.POST, getHttpEntity(request, null, appCode), String.class, fields).getBody();
    }

   private <T> HttpEntity<T> getHttpEntity(T t, String authorization, String appCode) {
        HttpHeaders headers = new HttpHeaders();
        headers.add("header", "value");
        headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
        return new HttpEntity<>(t, headers);
    }
 类似资料:
  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?

  • 问题内容: 我想使用这样的接口: 我用代表语音识别结果的不同类型的对象来实现它。 我的想法是,我只希望比较相同类型的结果。也就是说,如果我创建一个实现的类,我希望方法签名变为: 我觉得我的界面存在设计缺陷,因为到目前为止,我对cloneWithConfidence和返回ResultItem的其他方法的结果使用了非常难看的转换。 有没有更好的办法? 问题答案: 有一个经常见到的成语如下:

  • 所以我得到了一条快速路线 因此,这项工作在上面使用邮递员 http://localhost:8000/buildings/Audi 我想知道Axios post如何进入功能组件。这是我的东西,但它没有在快车上。 但它不起作用。 ~SRJ

  • 我对Springboot很陌生。我需要创建一个接受Excel文件的rest API。我需要使用excel文件中的数据来执行操作。我知道如何用@RequestParam和@RequestBody创建API,但不知道如何为excel文件创建API。我没有将文件存储在数据库中,所以不需要模型。我在网上搜索,但看到所有的资源谈论通过客户端上传文件。我想对我的API中收到的文件进行操作。

  • 问题内容: 我有一个初始化方法,该方法在广泛的层次结构中使用和覆盖。但是,每个init调用都继承了先前的工作。很自然,我会: 当然,这将确保所有内容都被调用并实例化。我想知道的是:我可以创建一种方法来确保调用super方法吗?如果所有init都没有被调用,那么对象中会发生故障,因此如果有人忘记了调用,我想抛出异常或错误。 TYFT〜伊顿 问题答案: 如果派生类无法调用超类,这是引发异常的一种方法:

  • 我正在学习Swift,需要随时调用我的方法,下面是代码: 返回错误- 我也试过像和都没有成功。 这里是我调用的方法: