在swagger内核版本1.3.x中,我们能够通过使用以下代码来控制DateTime的呈现,这一点在链接中也提到过:
import com.wordnik.swagger.converter.*;
String jsonString = "{" +
" \"id\": \"Date\"," +
" \"properties\": {" +
" \"value\": {" +
" \"required\": true," +
" \"description\": \"Date in ISO-8601 format\"," +
" \"notes\": \"Add any notes you like here\"," +
" \"type\": \"string\"," +
" \"format\": \"date-time\"" +
" }" +
" }" +
"}";
OverrideConverter converter = new OverrideConverter();
converter.add("java.util.Date", jsonString);
ModelConverters.addConverter(converter, true);
但是这个解决方案在swagger2.0中行不通,因为我无法在swagger2.0中找到OverrideConvertor。
目前,我的代码中的日期时间正在呈现如下:
LocalDateTime {
chronology (Chronology, optional),
weekOfWeekyear (integer, optional),
weekyear (integer, optional),
monthOfYear (integer, optional),
yearOfEra (integer, optional),
yearOfCentury (integer, optional),
centuryOfEra (integer, optional),
millisOfSecond (integer, optional),
millisOfDay (integer, optional),
secondOfMinute (integer, optional),
minuteOfHour (integer, optional),
hourOfDay (integer, optional),
year (integer, optional),
dayOfMonth (integer, optional),
dayOfWeek (integer, optional),
era (integer, optional),
dayOfYear (integer, optional),
fields (Array[DateTimeField], optional),
fieldTypes (Array[DateTimeFieldType], optional),
values (Array[integer], optional)
发布于 2016-12-13 15:10:22
我不知道如何将您的自定义转换器添加到swagger1.5。但是,这些是解决用例的方法:
您可以在生成的swagger对象中创建一个Model
并替换它,然后再将它转换为Json。
ModelImpl m = new ModelImpl()
.description("LocalDateTime in ISO format")
.format("ISO DateTime")
.name("DateTime")
.type("string");
Response response = getListingJsonResponse(app, context, sc, headers, uriInfo);
Swagger swagger = (Swagger) response.getEntity();
swagger.getDefinitions().put("LocalDateTime", m);
它将用字符串类型模型替换LocalDateTime
的定义。
另一种方法是迭代定义,无论在哪里看到对LocalDateTime的引用类型,都可以用字符串类型替换它:
Map<String, Model> definitions = swagger.getDefinitions();
for(Map.Entry<String, Model> e : definitions.entrySet()){
Map<String, Property> propertyMap = e.getValue().getProperties();
for(String key : propertyMap.keySet()){
Property value = propertyMap.get(key);
if(value.getType().equals("ref") && ((RefProperty) value).getSimpleRef().equals("LocalDateTime")){
propertyMap.put(key, new StringProperty("LocalDateTime in ISO format")
.example("dd-mm-yyyy")
.pattern("pattern")
.description("ISO format string"));
}
}
}
到目前为止,我还不知道有其他更清洁的方式来实现这一点。
更新
Swagger有一个DateTime
映射,而不是LocalDateTime
映射。因此,如果对您有效,也可以考虑将您的类型移动到DateTime
。
https://stackoverflow.com/questions/40819084
复制