簡體   English   中英

如何使用 Spring 從 REST 服務獲取令牌

[英]How to get token from a REST service with Spring

服務提供商為我提供了標題數據:grant_type、Content-Type。 和正文數據:grant_type、用戶名和密碼。 我在 Postman 中使用它生成 OK 令牌。 但是在 Spring 應用程序中它會生成一個錯誤 HttpClientErrorException $ BadRequest: 400 Bad Request。

我有設置身體數據的課程:

public class BodyToken {
    private String grant_type = "password";//set body data
    private String username = "User";//set body data
    private String password = "123";//set body data
    private String access_token;
    
    @JsonGetter("access_token")
    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    @JsonGetter("grant_type")
    public String getGrant_type() {
        return grant_type;
    }
    
    @JsonGetter("username")
    public String getUsername() {
        return username;
    }
    
    @JsonGetter("password")
    public String getPassword() {
        return password;
    }
}

這是設置標題數據的控制器:

@PostMapping("/TokenGeneration")
    @ResponseBody
    public BodyToken TokenGeneration() throws IOException {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.set("grant_type", "password");//set header data
        headers.set("Content-Type", "application/x-www-form-urlencoded");//set header data
        HttpEntity request = new HttpEntity(headers);               
        headers.add("User-Agent", "Spring's RestTemplate" );
        ResponseEntity<BodyToken> response = restTemplate.exchange(
                "https://sw/token",
                HttpMethod.POST,
                request,
                BodyToken.class
        );          
        try {               
            return response.getBody();             
        } catch (Exception e) {
            BodyToken body = new BodyToken();
            log.info(e.getMessage());
            return body;
        }
    }

OK 是通過使用 Class MultiValueMap 和 LinkedMultiValueMap 解決的。 憑證被添加到這個新對象中,並與請求一起發送:

@PostMapping("/TokenGeneration")
    @ResponseBody
    public BodyToken TokenGeneration() throws IOException {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.set("grant_type", "password");//set header data
        headers.set("Content-Type", "application/x-www-form-urlencoded");//set header data
        MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();//line solution     
        body.add("grant_type", "password");//line solution
        body.add("username", "user");//line solution
        body.add("password", "123");//line solution
        HttpEntity request = new HttpEntity(body, headers);//and I add this body to HttpEntity             
        headers.add("User-Agent", "Spring's RestTemplate" );
        ResponseEntity<BodyToken> response = restTemplate.exchange(
                "https://sw/token",
                HttpMethod.POST,
                request,
                BodyToken.class
        );          
        try {               
            return response.getBody();             
        } catch (Exception e) {
            BodyToken body = new BodyToken();
            log.info(e.getMessage());
            return body;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM