简体   繁体   中英

Getting Bad Request while trying to consume REST API in Java SpringBoot

Hi I am trying to consume a REST endpoint using POST, but I am getting the error below. The endpoint gives proper response in POSTMAN, but I am getting error in Java. Please let me know where the mistake is.

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [{
  "error":"unsupported_grant_type",
  "error_description":"The given grant_type is not supported"
}]] with root cause

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [{
  "error":"unsupported_grant_type",
  "error_description":"The given grant_type is not supported"
}]

Below is code:

Controller:

public class MemberController {

private static final Logger log = LoggerFactory.getLogger(MemberController.class);

@Autowired
MemberService memberService;

@PostMapping(value = "/token",  headers = "Accept=application/json")
public String getToken() {
    log.info("Test getToken method");
    return memberService.callTokenService();
}

Service Class:

public class MemberService {    
    private static final Logger log = LoggerFactory.getLogger(MemberService.class);    
    private RestTemplate restTemplate = new RestTemplate();    
    final String tokenURL = "-------";    

    public String callTokenService() {

        log.info("Inside Service");
    TokenInput input = new TokenInput();
    
    String clientId = "l7xxef159fc30ee8479e9a7dab859c458a4d";
    String clientSecret = "a63d0b4a01b844c0b7e7eb724ef13959";
    String grantType = "client_credentials";
    
    input.setCLIENT_ID(clientId);
    input.setCLIENT_SECRET(clientSecret);
    input.setGRANT_TYPE(grantType);
    

    ResponseEntity<TokenProperties> response = restTemplate.postForEntity(tokenURL,  input, TokenProperties.class);
    HttpStatus status = response.getStatusCode();
    
    log.info("Status: "+status);
    log.info("Response: "+response.toString());

    return response.toString();
    }

    

}

POJO class:

@JsonIgnoreProperties(ignoreUnknown = true)  
public class TokenProperties {    
    String access_token;
    String token_type;
    String expires_in;
    String scope;
    public String getAccess_token()
    {
        return access_token;
    }

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

    public String getToken_type()
    {
        return token_type;
    }

    public void setToken_type(String token_type)
    {
        this.token_type = token_type;
    }

    public String getExpires_in()
    {
        return expires_in;
    }
    public void setExpires_in(String expires_in)
    {
        this.expires_in = expires_in;
    }

    public String getScope()
    {
        return scope;
    }

    public void setScope(String scope)
    {
        this.scope = scope;
    }

    @Override
    public String toString() {
        return "{" + "access_token='" + access_token + '\'' + ", token_type=" + token_type + ", expires_in=" + expires_in + '\'' + "scope='" + scope + '}';
    }

}

TokenInput POJO:

package com.memberservice_v2;

public class TokenInput {

String CLIENT_ID;
String CLIENT_SECRET;
String GRANT_TYPE;

public String getCLIENT_ID() {
    return CLIENT_ID;
}
public void setCLIENT_ID(String cLIENT_ID) {
    CLIENT_ID = cLIENT_ID;
}
public String getCLIENT_SECRET() {
    return CLIENT_SECRET;
}
public void setCLIENT_SECRET(String cLIENT_SECRET) {
    CLIENT_SECRET = cLIENT_SECRET;
}
public String getGRANT_TYPE() {
    return GRANT_TYPE;
}
public void setGRANT_TYPE(String gRANT_TYPE) {
    GRANT_TYPE = gRANT_TYPE;
}

}

Can anyone please help me out? Please let me know where the mistake is. Thanks in Advance!

Your request ResponseEntity<TokenProperties> response = restTemplate.postForEntity(tokenURL, null, TokenProperties.class); to token endpoint is incomplete. You're not passing the payload (token request) as far as I can see in the aforementioned code.

First, create the token request and set the appropriate attributes such as client id, grant type etc.

TokenRequest tokenRequest = new TokenRequest();
// set the attributes as per the token endpoint

ResponseEntity<TokenProperties>  response = restTemplate.postForEntity(tokenURL,  tokenRequest, TokenProperties.class);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM