Код: Выделить всё
1.2.17
UTF-8
1.8
1.8
true
false
1.8
1.8
5.2.0.RELEASE
5.2.0.RELEASE
2.2.0.RELEASE
3.9
1.11
1.2
1.7.25
1.2.3
4.12
5.4.6.Final
0.11.2
2.10.3
1.9.1
31.1-jre
2.8.0
6.0.10.Final
4.12
2.0.1.Final
1.2.3
4.0.2
3.2.2
4.5.7
3.2.1
Код: Выделить всё
org.springdoc
springdoc-openapi-ui
1.7.0
Код: Выделить всё
package com.hititcs.craneota.api.service.config;
import com.hititcs.crane.types.basictypes.ClientInformationType;
import com.hititcs.craneota.api.service.security.conversation.Conversation;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
import javax.inject.Inject;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.SpringDocUtils;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestHeader;
@Configuration
public class OpenApiConfiguration {
@Inject
private Environment environment;
static {
// RequestHeader annotation'larını ignore et.
SpringDocUtils.getConfig().addAnnotationsToIgnore(RequestHeader.class);
// Conversation ve ClientInformationType parametrelerini ignore et
SpringDocUtils.getConfig().addRequestWrapperToIgnore(
Conversation.class, ClientInformationType.class
);
// Tüm enum sınıflarını reusable hale çevir
io.swagger.v3.core.jackson.ModelResolver.enumsAsRef = true;
}
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components())
.info(new Info()
.title("CraneOTA API Document")
.version(environment.getProperty("app.version", "unknown")));
}
@Bean
public OpenApiCustomiser addCustomGlobalResponseHeader() {
Schema errorResponseSchema = new Schema();
errorResponseSchema.setName("ErrorResponse");
errorResponseSchema.set$ref("#/components/schemas/ErrorResponse");
return openApi -> {
openApi.getPaths().values().stream().flatMap(pathItem -> pathItem.readOperations().stream())
.forEach(operation -> {
ApiResponses apiResponses = operation.getResponses();
apiResponses.addApiResponse("400", createApiResponse("Bad Request", errorResponseSchema));
apiResponses.addApiResponse("403", createApiResponse("Forbidden", null));
apiResponses.addApiResponse("404", createApiResponse("Not Found", null));
apiResponses.addApiResponse("500", createApiResponse("Server Error", errorResponseSchema));
});
};
}
private ApiResponse createApiResponse(String message, Schema schema) {
MediaType mediaType = new MediaType();
mediaType.schema(schema);
return new ApiResponse().description(message)
.content(new Content().addMediaType(org.springframework.http.MediaType.APPLICATION_JSON_VALUE, mediaType));
}
}
Код: Выделить всё
package com.hititcs.craneota.api.service.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.ServletRegistration;
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class[] getRootConfigClasses() {
return new Class[]{AppConfig.class};
}
@Override
protected Class[] getServletConfigClasses() {
return new Class[]{};
}
@NotNull
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setInitParameter("dispatchOptionsRequest", "true");
registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
super.customizeRegistration(registration);
}
@Override
public void onStartup(ServletContext container) throws ServletException {
super.onStartup(container);
AnnotationConfigWebApplicationContext ctx = getContext();
ctx.register(AppConfig.class);
ctx.setServletContext(container);
ServletRegistration.Dynamic servlet = container.addServlet("swaggerDispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.scan("rest");
context.register(OpenApiConfiguration.class, org.springdoc.webmvc.ui.SwaggerConfig.class,
org.springdoc.core.SwaggerUiConfigProperties.class, org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
org.springdoc.webmvc.core.MultipleOpenApiSupportConfiguration.class,
org.springdoc.core.SpringDocConfiguration.class, org.springdoc.core.SpringDocConfigProperties.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class);
return context;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -0-release
Мобильная версия