gpt4 book ai didi

java - 如何将 joda dateTime 转换为 swagger 中的字符串

转载 作者:行者123 更新时间:2023-11-30 07:01:37 24 4
gpt4 key购买 nike

在 swagger-core 版本 1.3.x 中,我们能够使用此代码来控制 DateTime 的渲染,如本文 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)

最佳答案

我不确定如何将自定义转换器添加到 swagger 1.5。但这些是适合您的用例的解决方法:

您可以创建一个 Model 并将其替换到生成的 swagger 对象中,然后再将其转换为 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

关于java - 如何将 joda dateTime 转换为 swagger 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40819084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com