FakerOpenAPI.java
package es.um.atica.faker;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.models.media.MediaType;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.examples.Example;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.media.Content;
@OpenAPIDefinition
@Configuration
public class FakerOpenAPI {
@Autowired
private ObjectMapper objectMapper;
private Map<String,String> errorResponses = new HashMap<>();
private ApiResponse buildApiResponse(String desc, String... errorIDs) {
MediaType mediaType = new MediaType();
for (String id: errorIDs) {
mediaType.addExamples(id,new Example().value(errorResponses.get(id)));
}
return new ApiResponse().content(
new Content().addMediaType(
org.springframework.http.MediaType.APPLICATION_JSON_VALUE,
mediaType)
).description(desc);
}
/*@Bean
public GroupedOpenApi usersApis() {
return GroupedOpenApi.builder()
.group("User Endpoints")
.pathsToMatch(new String[]{"/faker/v1/**"})
.build();
}*/
@Bean
public OpenAPI baseOpenAPI() {
try {
InputStream in = this.getClass().getClassLoader().getResourceAsStream("openapi/responses.json");
errorResponses = objectMapper.readValue(in, new TypeReference<Map<String,Object>>(){})
.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> {
try {
return objectMapper.writeValueAsString(e.getValue());
} catch (JsonProcessingException e1) { }
return e.getValue().toString();
}));
} catch (Exception ex) {
// Failed
}
Components components = new Components();
components.addResponses("unauthorized", buildApiResponse("Unauthorized!","401"));
components.addResponses("forbidden_get", buildApiResponse("Forbidden!","403_04"));
components.addResponses("forbidden_put", buildApiResponse("Forbidden!","403_01"));
components.addResponses("forbidden_post", buildApiResponse("Forbidden!","403_02"));
components.addResponses("forbidden_delete", buildApiResponse("Forbidden!","403_03"));
components.addResponses("notfound", buildApiResponse("Not Found!","404"));
components.addResponses("badrequest_put", buildApiResponse("Not Found!","400_01","400_02"));
components.addResponses("badrequest_post", buildApiResponse("Not Found!","400_03","400_04"));
components.addResponses("conflict", buildApiResponse("Conflict!","409"));
components.addResponses("ok_user", buildApiResponse("Success!","200_01"));
components.addResponses("ok_users", buildApiResponse("Success!","200_02"));
return new OpenAPI()
.components(components)
.info(new Info()
.title("Faker OpenAPI Doc")
.version("1.0.0")
.description("This is the faker api documentation")
);
}
}