package org.yzh.web.config; import io.github.yezhihao.protostar.annotation.Field; import io.github.yezhihao.protostar.annotation.Fs; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import org.springdoc.core.customizers.PropertyCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.lang.annotation.Annotation; import java.util.HashSet; import java.util.Set; /** * @author yezhihao * https://gitee.com/yezhihao/jt808-server */ @Configuration public class SwaggerConfig { @Bean public OpenAPI openAPI() { return new OpenAPI() .info(new Info() .title("部标JT/T808协议接入平台") .contact(new Contact().name("问题交流群:906230542").url("https://gitee.com/yezhihao")) .license(new License().name("Apache-2.0").url("https://www.apache.org/licenses")) .version("1.0.0")); } public static final Set ignores = new HashSet<>(); static { ignores.add("messageId"); ignores.add("properties"); ignores.add("protocolVersion"); ignores.add("serialNo"); ignores.add("packageTotal"); ignores.add("packageNo"); ignores.add("verified"); ignores.add("bodyLength"); ignores.add("encryption"); ignores.add("subpackage"); ignores.add("version"); ignores.add("reserved"); ignores.add("payload"); ignores.add("session"); ignores.add("messageName"); } @Bean public PropertyCustomizer propertyCustomizer() { return (schema, type) -> { String propertyName = type.getPropertyName(); boolean readOnly = ignores.contains(propertyName); schema.readOnly(readOnly); Field field = getField(type.getCtxAnnotations()); if (field != null) { schema.description(field.desc()); if (!readOnly) { schema.addRequiredItem("true"); } } return schema; }; } private Field getField(Annotation[] annotations) { if (annotations != null) { for (Annotation annotation : annotations) { if (annotation instanceof Field) { return (Field) annotation; } if (annotation instanceof Fs) { return ((Fs) annotation).value()[0]; } } } return null; } }