2016-11-26 47 views
1

在招搖核心1.3.x版,我們可以通過使用此代碼在本link還提到了控制日期時間的渲染:如何喬達時間值轉換爲字符串招搖

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); 

但這解決方案在swagger 2.0中不起作用,因爲我無法在swagger 2.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) 

回答

1

我不知道如何添加自定義轉換器招搖1.5。但是,這些是您的用例的解決方法:

您可以創建一個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")); 
     } 
    } 
    } 

截至目前,我不知道任何其他清潔的方式爲了達成這個。

UPDATE

揚鞭具有用於DateTime和不LocalDateTime的映射。所以你也可以考慮將你的類型移動到DateTime,如果這對你有用。

相關問題