首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对接受参数的方法进行REST API调用

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

Stack Overflow用户
提问于 2020-01-15 12:29:27
回答 1查看 48关注 0票数 0

我对api调用还是个新手。我得到了一个生成token的java类。我被要求构建一个web服务,使用它们对SecurityUtil字段(.calculateAuthorizationSignature,clientId,clientSecret)方法进行api调用。

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

公共类SecurityUtil {公共静态空main(String[]参数){

代码语言:javascript
复制
    String[] fields = new String[3];

// POC+100+05QQAWQERQWHYTFDYUSwY

代码语言:javascript
复制
    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发布com.abelinho.securityutil secutildemo 0.0.1- Spring Boot快照secutildemo演示项目

代码语言:javascript
复制
<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>

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

1

敬请协助。谢谢你们!

EN

回答 1

Stack Overflow用户

发布于 2020-01-15 12:37:05

要进行API调用,您需要使用任何http客户端,如使用rest模板的RestTemplate或FeignClient,您可以调用API,

代码语言:javascript
复制
  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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59745155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档