Swagger Codegen CLI Java Client - How to use it right
The issue is that your specification does not mention the types of Security you want to use (a.k.a. Security Definitions) or which Security Definition applies to which end point.
The swagger specification is here, but it doesn't tell the whole story.
What you need to do is 1. Set up the Security Definitions. Here is a simple basic http auth definition:
securityDefinitions:
basic:
type: basic
description: HTTP Basic Authentication.
and 2. Use that security definition in the end point.
paths:
/:
get:
security:
- basic: []
responses:
200:
description: OK
Then regenerate your swagger client code. It should set up the immutable map correctly and the authNames array.
As already suggested, if you don't want to modify existing code, you can extend the ApiClient
in your custom configuration, e.g.
@Configuration
public class Config {
@Value("${baseUrl}")
private String baseUrl;
protected class AuthApiClient extends ApiClient {
public AuthApiClient() {
super();
}
@Override
public <T> T invokeAPI(final String path, final HttpMethod method,
final MultiValueMap<String, String> queryParams, final Object body,
final HttpHeaders headerParams, final MultiValueMap<String, Object> formParams,
final List<MediaType> accept, final MediaType contentType,
final String[] authNames, final ParameterizedTypeReference<T> returnType)
throws RestClientException {
final HttpBasicAuth auth = new HttpBasicAuth();
auth.setUsername("myUsername");
auth.setPassword("myPassword");
auth.applyToParams(queryParams, headerParams);
return super.invokeAPI(path, method, queryParams, body, headerParams, formParams,
accept, contentType, authNames, returnType);
}
}
@Bean
@Primary
@Qualifier("MyApiClient")
public AuthApiClient myApiClient() {
final AuthApiClient apiClient = new AuthApiClient();
apiClient.setBasePath(this.baseUrl);
return apiClient;
}
}