use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class AnnotationUtils method generateResponseProperty.
public static Property generateResponseProperty(Swagger swagger, ResponseConfigBase config) throws Error {
Class<?> responseClass = config.getResponseClass();
if (responseClass == null || ReflectionUtils.isVoid(responseClass)) {
return null;
}
if (!ClassUtils.isPrimitiveOrWrapper(responseClass)) {
Map<String, Model> newDefinitions = ModelConverters.getInstance().readAll(responseClass);
appendDefinition(swagger, newDefinitions);
}
Property property = ModelConverters.getInstance().readAsProperty(responseClass);
// 根据swagger定义这里是区分大小写的, 虽然不明白为何这样做,不过还是不要改标准了
switch(config.getResponseContainer()) {
case "List":
property = new ArrayProperty(property);
break;
case "Set":
property = new ArrayProperty(property);
((ArrayProperty) property).setUniqueItems(true);
break;
case "Map":
property = new MapProperty(property);
break;
case "":
// 不必处理
break;
default:
throw new Error("not support responseContainer " + config.getResponseContainer());
}
return property;
}
use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class TestSwaggerUtils method testConverter.
@Test
public void testConverter() {
SwaggerGenerator generator = new SwaggerGeneratorForTest(context, null);
Swagger swagger = generator.getSwagger();
ParamUtils.addDefinitions(swagger, User.class);
Model model = swagger.getDefinitions().get("User");
model.getVendorExtensions().clear();
JavaType javaType = ConverterMgr.findJavaType(generator, model);
checkJavaType(swagger, javaType);
RefModel refModel = new RefModel();
refModel.setReference("User");
javaType = ConverterMgr.findJavaType(generator, refModel);
checkJavaType(swagger, javaType);
}
use of io.swagger.models.Model in project java-chassis by ServiceComb.
the class ArgumentsMapperFactory method processBodyFieldArgMapper.
// 将多个provider参数映射为契约body的field
// value为field在provider参数中的下标
protected void processBodyFieldArgMapper(ArgumentsMapperConfig config, int swaggerIdx) {
Class<?>[] swaggerParameterTypes = config.getSwaggerMethod().getParameterTypes();
Class<?> swaggerParameterType = swaggerParameterTypes[swaggerIdx];
BodyParameter bp = (BodyParameter) config.getSwaggerParameters().get(swaggerIdx);
Model model = bp.getSchema();
if (RefModel.class.isInstance(model)) {
String refName = ((RefModel) model).getSimpleRef();
model = config.getSwagger().getDefinitions().get(refName);
}
Map<Integer, Field> fieldMap = new HashMap<>();
for (String propertyName : model.getProperties().keySet()) {
// 理论上应该只在provider的body类型的参数中查找,不过正常定义契约不会有问题的,先不用处理了
int providerIdx = findInParameters(propertyName, config.getProviderParameters());
if (providerIdx >= 0) {
Field field = ReflectionUtils.findField(swaggerParameterType, propertyName);
field.setAccessible(true);
fieldMap.put(providerIdx, field);
continue;
}
String msg = generateSkipParamInfo("body parameter field", config, propertyName);
LOGGER.warn(msg);
}
ArgumentMapper bodyFieldArg = createBodyFieldArgMapper(config, swaggerIdx, fieldMap);
config.addArgumentMapper(bodyFieldArg);
}
use of io.swagger.models.Model in project swagger-core by swagger-api.
the class SwaggerSerializerTest method convertSpec.
@Test(description = "it should convert a spec")
public void convertSpec() throws IOException {
final Model personModel = ModelConverters.getInstance().read(Person.class).get("Person");
final Model errorModel = ModelConverters.getInstance().read(Error.class).get("Error");
final Info info = new Info().version("1.0.0").title("Swagger Petstore");
final Contact contact = new Contact().name("Swagger API Team").email("foo@bar.baz").url("http://swagger.io");
info.setContact(contact);
final Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "value");
info.setVendorExtension("x-test2", map);
info.setVendorExtension("x-test", "value");
final Swagger swagger = new Swagger().info(info).host("petstore.swagger.io").securityDefinition("api-key", new ApiKeyAuthDefinition("key", In.HEADER)).scheme(Scheme.HTTP).consumes("application/json").produces("application/json").model("Person", personModel).model("Error", errorModel);
final Operation get = new Operation().produces("application/json").summary("finds pets in the system").description("a longer description").tag("Pet Operations").operationId("get pet by id").deprecated(true);
get.parameter(new QueryParameter().name("tags").description("tags to filter by").required(false).property(new StringProperty()));
get.parameter(new PathParameter().name("petId").description("pet to fetch").property(new LongProperty()));
final Response response = new Response().description("pets returned").schema(new RefProperty().asDefault("Person")).example("application/json", "fun!");
final Response errorResponse = new Response().description("error response").schema(new RefProperty().asDefault("Error"));
get.response(200, response).defaultResponse(errorResponse);
final Operation post = new Operation().summary("adds a new pet").description("you can add a new pet this way").tag("Pet Operations").operationId("add pet").defaultResponse(errorResponse).parameter(new BodyParameter().description("the pet to add").schema(new RefModel().asDefault("Person")));
swagger.path("/pets", new Path().get(get).post(post));
final String swaggerJson = Json.mapper().writeValueAsString(swagger);
final Swagger rebuilt = Json.mapper().readValue(swaggerJson, Swagger.class);
SerializationMatchers.assertEqualsToJson(rebuilt, swaggerJson);
}
use of io.swagger.models.Model in project swagger-core by swagger-api.
the class SwaggerSerializerTest method writeSpecWithParameterReferences.
@Test(description = "it should write a spec with parameter references")
public void writeSpecWithParameterReferences() throws IOException {
final Model personModel = ModelConverters.getInstance().read(Person.class).get("Person");
final Info info = new Info().version("1.0.0").title("Swagger Petstore");
final Contact contact = new Contact().name("Swagger API Team").email("foo@bar.baz").url("http://swagger.io");
info.setContact(contact);
final Swagger swagger = new Swagger().info(info).host("petstore.swagger.io").securityDefinition("api-key", new ApiKeyAuthDefinition("key", In.HEADER)).scheme(Scheme.HTTP).consumes("application/json").produces("application/json").model("Person", personModel);
final QueryParameter parameter = new QueryParameter().name("id").description("a common get parameter").property(new LongProperty());
final Operation get = new Operation().produces("application/json").summary("finds pets in the system").description("a longer description").tag("Pet Operations").operationId("get pet by id").parameter(new RefParameter("foo"));
swagger.parameter("foo", parameter).path("/pets", new Path().get(get));
final String swaggerJson = Json.mapper().writeValueAsString(swagger);
final Swagger rebuilt = Json.mapper().readValue(swaggerJson, Swagger.class);
assertEquals(Json.pretty(swagger), Json.pretty(rebuilt));
}
Aggregations